快速排序-C语言qsort函数简介-以简单数据类型数据排序为例

本篇目的:介绍C语言中快速排序函数的用法。

qsort:quick sort,快速排序。

其出世之日,电闪雷鸣,震惊了世界,其他排序算法的速度不能望其项背。

一、项目驱动

对于一个整数数组,请分别对其中数据进行升序和降序排列。

二、函数原型

#include <stdlib.h> //头文件

void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) );

buf:待排序数据的首地址

num:待排序数据个数

size:每个数据的大小,单位是字节

compare:比较函数。

可以通过重新定义compare比较函数,来调整是升序还是降序。

int (*compare)(const void *, const void *) 这是函数的原型,即你必须按照这种个数来自己定义该函数。

三、比较函数的写法

int Asending(const void *x,const void *y)
{//升序比较函数 
	int *a,*b;
	a=(int*)x;
	b=(int*)y;
	if(*a>*b)
		return 1;
	else if(*a==*b)
		return 0;
	else
		return -1;	
}

int Desending(const void *x,const void *y)
{//升序比较函数 
	int *a, *b;
	a=(int*)x;
	b=(int*)y;
	if(*a>*b)
		return -1;
	else if(*a==*b)
		return 0;
	else
		return 1;	
}

注意:比较函数的名字无所谓,但是其参数和返回值类型是系统规定好的。你必须符合规则。

四、主函数

void printArray1D(int a[],int n) 
{//打印数组中数据 
	int i;
	for(i=0;i<n;i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n");
}
int main()
{
	int a[]={1,4,6,2,5,3};//数组
	int n=sizeof(a)/sizeof(int);//数据个数
	
	//升序排列
	qsort(a,n,sizeof(int),Asending);	
	printArray1D(a,n) ;
	 //降序排列
	qsort(a,n,sizeof(int),Desending);	
	printArray1D(a,n) ;
	
	
	return 0;
}

注意:主调函数在调用qsort时,把比较函数当作参数传递给qsort,其内部机制为:

x会指向a[i],y会指向a[j]

若compare(x,y)返回值为1,则交换a[i]和a[j]的值,否则不交换。

所以你调整比较函数的返回值是 1 还是 -1,就能调整是升序还是降序。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值