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

/*
快速排序法
函数原型(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 40
void 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; 
} 
 

你可能感兴趣的:(c,快速排序,cc++)