rows - количесвто строк
cols - количество столбцов
col - глобальная переменная сод.номер столбца
double mass[rows][cols];
int compare(const void *arg1, const void *arg2)
{
return (*((double *)arg2 + col) - *((double *)arg1 + col) < 0) ? 1 : -1;
}
qsort(&mass[0][0], rows, sizeof(double)*cols, compare);
qsort: сортировка 2мерного массива типа double
нужно отсортировать 2 мерный массив типа double по одному из столбцов с помощью qsort(). как написать пользовательскую функцию сортировки? может есть где простой пример как реализовать сортировку? (готовый алгоритм не предлагать :) )
а зайти в полезные ссылки? да сходить на сайты с алгоритмами? воспользоваться поиском тоже не помешает...
Цитата: Gazzy
нужно отсортировать 2 мерный массив типа double по одному из столбцов с помощью qsort(). как написать пользовательскую функцию сортировки? может есть где простой пример как реализовать сортировку? (готовый алгоритм не предлагать :) )
Чем отличается пример от готового алгоритма?
Код:
Спасибо всем! Насчет готового алгоритма я немного не точно выразился, имел в виду готовую программу, исходник которой нельзя посмотреть. :)
а если вместо 2мерного массива массив структур и струкьтуры нужно упорядочить по одному из членов????
Цитата: Gazzy
а если вместо 2мерного массива массив структур и струкьтуры нужно упорядочить по одному из членов????
Код:
unsigned int offset - глобальная переменная
N - размер массива
struct PERSON
{
int age;
int ss;
float weight;
char name[25];
};
PERSON mass[N];
Тогда для сортировки по полю name
offset = (unsigned int)&mass[0].name - (unsigned int)&mass[0];
qsort(&mass[0], N, sizeof(PERSON), compare);
int compare(const void *arg1, const void *arg2)
{
return strcmp((char *)(unsigned int)arg1 + offset,(char *)(unsigned int)arg2 + offset);
}
Для сортировки по полю ss
offset = (unsigned int)&mass[0].ss - (unsigned int)&mass[0];
qsort(&mass[0], N, sizeof(PERSON), compare);
int compare(const void *arg1, const void *arg2)
{
return *(int *)((unsigned int)arg1 + offset) - *(int *)((unsigned int)arg2 + offset);
}
Не исключено, что offset можно определить и более стандартным способом.
N - размер массива
struct PERSON
{
int age;
int ss;
float weight;
char name[25];
};
PERSON mass[N];
Тогда для сортировки по полю name
offset = (unsigned int)&mass[0].name - (unsigned int)&mass[0];
qsort(&mass[0], N, sizeof(PERSON), compare);
int compare(const void *arg1, const void *arg2)
{
return strcmp((char *)(unsigned int)arg1 + offset,(char *)(unsigned int)arg2 + offset);
}
Для сортировки по полю ss
offset = (unsigned int)&mass[0].ss - (unsigned int)&mass[0];
qsort(&mass[0], N, sizeof(PERSON), compare);
int compare(const void *arg1, const void *arg2)
{
return *(int *)((unsigned int)arg1 + offset) - *(int *)((unsigned int)arg2 + offset);
}
Не исключено, что offset можно определить и более стандартным способом.