对qsort的理解

2 篇文章 0 订阅

对qsort的理解

c语言中自带的快拍qsort, 需要自己写一个comp的比较函数.
void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
(数组名, 长度, 比较函数)

# include <stdio.h>
# include <stdlib.h>

int a[] = {1, 3, 4, 2, 5};
//从小到大
int comp(const void * p1, const void * p2){
	return *((int*)p1) - *((int *)p2);
}

int main(){

	qsort(a, 5, sizeof(int), comp);

	for(int i = 0; i < 5; ++i){
		printf("%d\t", a[i]);
	}

	return 0;
}

因此做出测试, 以便理解qsort的原理
在comp中加入一下代码输出测试结果.

	puts("\n");
	for(int i = 0; i<5; ++i){
		printf("%d\t", a[i]);
	}
	puts("\n\n");
	
	printf("%d -- %d = %d\n", *((int*)p1), *((int *)p2), *((int*)p1) - *((int *)p2));

第一次测试
在这里插入图片描述
有结果可知, p2, p1的顺序, p2是前面那个数, p1是后面那个数.
如果返回正数, 则证明后面的比前面的大, 这个大的书进入下次的比较, 3 --> 4
返回负数, 则证明前面的数大, 该数继续进行下次的比较,
5–4 = 1// 第一轮结束, 最大值为5
第二轮, 从头开始判断, 找到一个最大值, 放在倒数第二个位置.
类似于冒泡排序.
简单说, 返回负数, 则将p1要放在后面, (p1在p2的后面)
return ((int)p1) - *((int *)p2);
即为从小到大排序.
return ((int)p2) - *((int *)p1);
即为从小到打排序

若将数组a改为

int a[] = {5, 3, 4, 2, 1};

在这里插入图片描述
可以自己理解下.

之后将写
int arr1[];
float arr2[];
char arr3[];
char arr4[][]; //每个字符串进行排序
int arr5[][];//每行的数据进行排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值