《C primer plus》qsort(...)-快速排序法

来源:互联网 发布:傻瓜进销存软件破解版 编辑:程序博客网 时间:2024/06/06 07:24
/*快速排序法函数原型(stdlib.h内声明了该原型)void qsort(void*, size_t, size_t, int*(const void*, const void*))或void qsort(void *base,size_t nmemb,size_t size,int (*compar)(const void *,const void *)第一个参数base--需要排序的数组地址既数组头部的指针第二个参数nmemb--需要排序的member数第三个参数size--需要排序的单个元素的大小--一般是传入 sizeof(类型名)第四个参数int(*compar)(const void *,const void *)--传入一个指向函数的指针,该形式的函数需要自己定义。qsort根据返回的int值来决定升序、降序或其他自定义的实现。qsort会将第一个参数所指向的数组中的两个元素的地址传入该函数。*/#include <stdio.h>#include <stdlib.h>#define NUM 40void fillarray(double ar[],int n);void showarray(const double ar[],int n);int mycomp(const void * p1,const void * p2);int main(void){double vals[NUM];fillarray(vals,NUM); //给vals数组赋值puts("Random list: ");showarray(vals,NUM);//显示数组各元素qsort(vals,NUM,sizeof(double),mycomp); //从大到小排序puts("\nSorted list: ");showarray(vals,NUM);//显示经排序后的数组return 0;} //操作数组空间的函数--赋予vals数组各元素具体的值 void fillarray(double ar[],int n){int index;for(index=0;index<n;index++)ar[index]=(double)rand()/((double)rand()+0.1);}//显示排序前的通过随机产生的数组元素void showarray(const double ar[],int n){int index;for(index=0;index<n;index++){printf("%9.4f ",ar[index]);if(index%6 == 5)putchar('\n');}putchar('\n'); } //默认按按从小到大的顺序排序值,如果将*a1>*a2返回-1就是降序int mycomp(const void *p1,const void * p2){//先转换成需要比较的数组的类型 const double * a1=(const double *)p1;const double * a2=(const double *)p2;if(*a1>*a2) return 1;else if(*a1==*a2) return 0; else return -1; }  

0 0
原创粉丝点击