[英]sort multidimensional array with qsort in C
我正在嘗試使用qsort對多維數組進行排序,但是結果是胡說八道。
我的代碼(節選):
#include <stdio.h>
#include <stdlib.h>
int srovnejVelikost(const void *p1, const void *p2) {
const long int (*a)[5] = p1;
const long int (*b)[5] = p2;
return ((*a)[0] + (*a)[1] - (*b)[0] - (*b)[1]);
}
long int nadrze[200000][5];
[values added into the array here]
qsort (nadrze, 200000, sizeof(nadrze[0]), srovnejVelikost);
應該根據(nadrze [a] [0] + nadrze [a] [1]-nadrze [b] [0]-nadrze [b] [1])的結果對nadrze []進行排序。...全部5元素移動
謝謝你的幫助。 非常感謝。
如果您的排序標准確實是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(ling int)* max_j,在您的情況下為5。
這有意義嗎?
( qsort
比較函數並不關心您是否將其傳遞給一個int或一個數組,它取決於您如何處理它。因此請注意,我們不能超出您的預期范圍。)
int arr[10][100];
for(i=0;i<10;i++){
qsort(arr[i],------,-----,----);
}
它是多維數組,您可以一次對一個數組進行排序,而qsort不能一次對所有數組進行排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.