开门见山的说:
qsort作为一个比较万能的排序函数,排序类型多的一批。
qsort作为一个比较万能的排序函数,使用缺陷就是需要自定义一个比较函数
关于qsort函数使用在这篇文章有详细解析qsort函数的使用https://blog.csdn.net/tq411810317/article/details/124227607?spm=1001.2014.3001.5501
我们直接来说这个函数的参数,总共有四个
qsort( 需要排序数据的起始位置(指针类型),需要排序的元素个数,一个元素的字节大小,‘比较函数’)
那么我们基本确定这个函数的形参为
void* , int ,int , 函数指针
qsort(void* , int ,int ,函数指针)
确立实现函数的部分
1 .首先确定使用冒泡排序
2.并将比较函数返回值作为判断依据
3.进行交换
对于比较中函数使用char型指针,跳跃一个元素时,取j+元素字节大小,可以保证不管是什么元素都能一个一个进行比较
整体代码:
#include<stdio.h>
int cmop_int(const void* a1, const void* a2)
{
return (*(int*)a1 - *(int*)a2);
}
void tmp(char*pu1,char* pu2,int sz)
{
for (int x = 0; x < sz; x++)
{
char tmp = *pu1;
*pu1 = *pu2;
*pu2 = tmp;
pu1++;
pu2++;
}
}
void bubu_qsort(const void*po,int kz,int sz,int(*cmp)(const void*buf1,const void*buf2) )
{
int i = 0;
for (i = 0; i < kz-1; i++)
{
for (int j = 0; j < kz-i-1; j++)
{
if ( cmp( ((char*)po + sz * j ), ( (char*)po + sz * (j + 1) ) )>0 )
{
tmp( ((char*)po + sz * j ), ((char*)po + sz * (j + 1)),sz);
}
}
}
}
int main()
{
int arr[] = {2,5,48,56,35,12,174,78 };
int kz = sizeof(arr) / sizeof(arr[0]);
bubu_qsort(arr, kz, sizeof(arr[0]), cmop_int);
return 0;
}
冒泡排序
for (i = 0; i < kz-1; i++)
{
for (int j = 0; j < kz-i-1; j++)
{
if ( cmp( ((char*)po + sz * j ), ( (char*)po + sz * (j + 1) ) )>0 )
{
tmp( ((char*)po + sz * j ), ((char*)po + sz * (j + 1)),sz);}
}
}
比较函数返回值作为判断依据
if ( cmp( ((char*)po + sz * j ), ( (char*)po + sz * (j + 1) ) )>0 )
进行交换
tmp( ((char*)po + sz * j ), ((char*)po + sz * (j + 1)),sz);
函数使用char型指针,跳跃一个元素时,取j+元素字节大小,可以保证不管是什么元素都能一个一个进行比较
void tmp(char*pu1,char* pu2,int sz)
{
for (int x = 0; x < sz; x++)
{
char tmp = *pu1;
*pu1 = *pu2;
*pu2 = tmp;
pu1++;
pu2++;
}
}
结果
哈,谢谢各位同志的阅读,然后呢如果觉得本文对您有所帮助的话,还给个免费的赞吧
Thanks♪(・ω・)ノ
(期待一下,要是有分享和收藏更好啦)