《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)
{
	return *(double*)p1 - *(double*)p2;
} 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值