Post

使用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.