下面是按升序对数值进行排序的代码,它对于 L
的较低值工作正常,但当 L
的值变为 高达/超过 1,000,000。
for(i=0; i<L; i++) {
for(j=i+1; j<L; j++) {
if(SARAY[j] < SARAY[i]) {
temp = SARAY[i];
SARAY[i] = SARAY[j];
SARAY[j] = temp;
}
}
}
有人可以建议我改进它吗?
最佳答案
这是一个关于如何使用 qsort
的基本示例,它会快得多。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int int_cmp(const void *a, const void *b) {
const int *ia = (const int *)a; // casting pointer types
const int *ib = (const int *)b;
return (*ia > *ib) - (*ia < *ib);
}
int main(int argc, char *argv[]) {
int j;
int numbers[] = { 7, 3, 4, 1, -1, 23, 12, 43, 2, -4, 5 };
size_t numbers_len = sizeof(numbers)/sizeof(int);
qsort(numbers, numbers_len, sizeof(int), int_cmp);
for(j = 0; j < numbers_len; j++) printf("%d\n", numbers[j]);
}
这将以升序打印整数(从最小的数字开始)。
如果你想按降序打印整数(从最大的数字开始),你可以反转循环
for(j = numbers_len-1; j >= 0; j--) printf("%d\n", numbers[j]);
关于c - 如何提高数组排序效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33322314/