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