使用C语言标准库函数做数组排序
使用C语言标准库函数做数组排序
在C语言标准库里面有一个通用的排序函数叫
1
qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void * , const void *))
一般void *base
可以使用任何类型的数组。
第二个参数时元素数量,第三个是大小,
最后一个参数int (*compar)
可以读取两个元素。
因此我们可以这样用c语言写排序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
int icmp(const void *a, const void *b){
int x = *(int*)a;
int y = *(int*)b;
if(x==y)return 0;
if(x>y)return -1;
return 1;
}
int main(int argc, char **argv){
int ary[]= {4,7,1,2};
const size_t alen = sizeof(ary)/sizeof(int);
size_t i;
qsort(ary, alen, sizeof(int), icmp);
for(i=0; i<alen; i++){
printf("ary[%d] = %d\n",i,ary[i]);
}
}
但是没什么用,编译的时候大概会被优化成一样的结果。
This post is licensed under
CC BY 4.0
by the author.