模拟实现qsort函数 qsort---万用排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟实现qsort函数 qsort---万用排序相关的知识,希望对你有一定的参考价值。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void swap(char*a, char*b, int wid){
//因为我们不知道要替换的两个值占内存多大
//所以选择把这个值变成char类型,char字节占一个字节
//而传进去的wid就是一个数组的元素有多少个字节
//将a和b交换
int i = 0;
for (i = 0; i < wid; i++, a++,b++)
{
char tmp = *a;
*a = *b;
*b = tmp;
}
}
int duibi(void*a, void*b){
//这里是可更改的函数,作用是用传进来的数组的第一个数减去第二个数得到一个大于0等于0和小于0的数字
//大于0则a>b 小于0则a<b 等于0则a=b
return *(int*)a - *(int*)b;
}
void mppx(void*suzu, int sz, int wid, int(*cmp)(void*e1,void*e2)){
int i = 0;
for ( i = 0; i < sz-1; i++)
{
int j = 0;
for ( j = 0; j < sz-1-i; j++)
{
//替换
if (cmp((char*)suzu + j*wid, (char*)suzu + (j+1)*wid)>0)
//指针加减
{
swap((char*)suzu + j*wid, (char*)suzu + (j + 1)*wid,wid);
}
}
}
}
void intlx(){
int arr[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
mppx(arr, sz, sizeof(arr[0]), duibi);
//万用冒泡排序,适用于任何类型的比较
//mppx(数组,元素个数,单个元素个数占用的内存,进行比较的函数)
for ( i = 0; i < sz; i++)
{
printf("%d", arr[i]);
}
}
int main(){
intlx();
return 0;
}
以上是关于模拟实现qsort函数 qsort---万用排序的主要内容,如果未能解决你的问题,请参考以下文章