C语言排序

C语言排序,第1张

排序

排序也是程序日常需要做的工作之一,排序的算法有很多,比如冒泡、选择、快速、堆等算法,针对不同情况可以选择不同的算法,但为了提升编码效率,库函数提供一种通用高效排序方法,我们只需提供比较条件就可以直接调用,这样就大大降低了排序的难度。

C语言提供了qsort(),从名称上可以看出它是快速排序法,对较大型的数组而言,快速排序是最有效的排序算法之,该算法由C.A.R.Hoare于1962年开发,它把数组不断分成更小的数组,直到变成单元素数组。

首先,把数组分成两部分,一部分的值都小于另一部分的值,这个过程一直持续到数组完全排序好为止。

qsort()包含在stdlib.h中,格式如下:
void qsort (void *base, size_ t nmemb, size_ t size, int (*compar) (const void *,const void *)) ;
base是数组名或指针,nmemb是数组长度,size是元素大小,int (*compar) (const void *,const void )是比较函数。

由于qsort是通用函数,因此它通过void接受任意数组,由于不知道数组具体类型和大小,需要提供数组长度和元素大小,最后一个参数是通用一个函数指针,它接受两个数据的地址,如何比较需要自己定义,如果两个元素相等返回0,第一个元素大于第二个大返回正数,否则返回负数。

下面给出一个随机数数组,然后调用qsort()排序,最后输出该数组。

#include
#include

int comFun(const void* a, const void* b)
{
	int* pa = a;
	int* pb = b;
	return *pa - *pb;
}

int main()
{
	//用随机数生成拥有10个元素的数组
	int arr[10] = {0};
	srand((unsigned)time(NULL));
	int i = 0;
	for (i = 0; i < 10; i++) arr[i] = rand();

	qsort(arr,10,sizeof(int),comFun);
	for (i = 0; i < 10; i++) printf("%d ",arr[i]);
} 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/662473.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-18
下一篇 2022-04-18

发表评论

登录后才能评论

评论列表(0条)

保存