我有这个数组:
[105][2500]
[110][1800]
[105][800]
[105][1300]
[110][1200]
...
我需要这个:
[105][800]
[105][1300]
[105][2500]
[110][1200]
[110][1800]
...
新编辑:现在我的代码是: row是行的nuber,数组是2D int数组[row] [2]
...
for (i = 0; i < row; i++)
printf("(%d, %d)\n", array[i][0], array[i][1]);
qsort(array, row, 2*sizeof(int), compare);
printf("\n sorted: \n");
for (i = 0; i < row; i++)
printf("(%d, %d)\n", array[i][0], array[i][1]);
...
比较功能:
int compare(void const *p_lhs, void const *p_rhs) {
int const *lhs = (int const *) p_lhs;
int const *rhs = (int const *) p_rhs;
// printf("%d %d - %d %d", lhs[0], rhs[0], lhs[1], rhs[1]);
if(lhs[0] < rhs[0]) return -1;
if(lhs[0] > rhs[0]) return 1;
if(lhs[1] < rhs[1]) return -1;
if(lhs[1] > rhs[1]) return 1;
return 0;
}
在比较函数中使用pritf输出:http://i.imgur.com/QPUXEPF.png 输出为:http://i.imgur.com/pzk8KAU.png
答案 0 :(得分:3)
令人高兴的是,标准库中有qsort
。实际上,您所要做的就是为外部数组的元素提供比较函数。例如:
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
// lexicographical comparison.
// Returns -1 for lhs < rhs, 1 for lhs > rhs, 0 for lhs == rhs.
int compare_line(void const *p_lhs, void const *p_rhs) {
// These point to the elements of the outer arrays (that is,
// they point to the inner arrays)
double const *lhs = (double const *) p_lhs;
double const *rhs = (double const *) p_rhs;
if(lhs[0] < rhs[0]) return -1;
if(lhs[0] > rhs[0]) return 1;
if(lhs[1] < rhs[1]) return -1;
if(lhs[1] > rhs[1]) return 1;
return 0;
}
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof*(arr))
int main(void) {
double data[][2] = {
{ 105, 800 },
{ 105, 1300 },
{ 105, 2500 },
{ 110, 1200 },
{ 110, 1800 }
};
// Sorting here.
qsort(data, ARRAY_SIZE(data), sizeof(data[0]), compare_line);
for(size_t i = 0; i < ARRAY_SIZE(data); ++i) {
printf("%lf %lf\n", data[i][0], data[i][1]);
}
}