模拟实现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;
}

猜你喜欢

转载自blog.51cto.com/14893161/2541838