Если критерии сортировки действительно nadrze[a][0] + nadrze[a][1] - nadrze[b][0] - nadrze[b]
, я нахожу следующий пример, чтобы представить его:
#include <stdio.h>
#include <stdlib.h>
#define max_i 5
#define max_j 5
int srovnejVelikost(const void *p1, const void *p2) {
const long int *a = p1;
const long int *b = p2;
return ((a[0] + a[1]) - (b[0] + b[1]));
}
int main(int argc, char **argv)
{
int i = 0;
int j = 0;
long int nadrze[max_i][max_j];
long int d = 0;
printf("Before\n");
for (i = 0; i < max_i; ++i) {
d = (nadrze[i][0] + nadrze[i][1]);
printf("i: %d %d\n",i, d);
}
qsort(nadrze, max_i, sizeof(long int)*max_j, srovnejVelikost);
printf("After\n");
for (i = 0; i < max_i; ++i) {
d = (nadrze[i][0] + nadrze[i][1]);
printf("i: %d %d\n",i, d);
}
return(EXIT_SUCCESS);
}
Вы можете расшириться MAX_I и max_j, как нуждается в вашем случае. Я только что использовал defines
, поскольку я тестировал.
Также обратите внимание, что я закодировал его как (a[0] + a[1]) - (b[0] + b[1])
, поскольку это эквивалентно a[0] +a[1] - b[0] - b[1]
, и это имеет больше смысла, когда я читаю его для компаратора.
Вам необходимо пройти целый ряд к qsort
, что я делаю, говоря, ширина `SizeOf (лин целое) * max_j, что в вашем случае 5.
Имеет ли это смысл?
(Функция сравнения qsort
не имеет значения, если вы передадите ей один int или массив, зависит от вас, как вы справляетесь с этим. Поэтому следите за тем, чтобы вы не имели доступа к тому, что вы хотели.)
* «результат - бессмыслица» * Сначала укажите, как многомерный массив считается «отсортированным». Для меня, без какой-либо информации, это не имеет никакого смысла. – Manu343726
Также подумайте о переводе кода на английский. Это помогает понять ваш код. – Manu343726
Язык не проблема, перевод в этом случае не принесет никакой пользы ... Например: nadrze [0] = {-10,20,0,0,0}, nadrze [1] = {5 , 40,0,0,0}; Сортировка должна выполняться путем сравнения (nadrze [0] [0] + nadrze [0] [1]) и (nadrze [1] [0] + nadrze [1] [1]). Последний больше (45 против 10), поэтому nadrze [1] должен быть после nadrze [0] в отсортированном массиве. Проблема в том, что при печати значений после сортировки я получаю огромные числа, которые не имеют для меня никакого смысла. (должны быть те же значения, что и до сортировки, просто отсортированы) – user2976787