任意类型通用的qsort冒泡排序


代码实现(Visual Studio 2017)

#include <stdio.h>
#include <windows.h>

static int int_cmp(void* p1, void* p2)//int型比较函数
{
    return *((int*)p1) > *((int*)p2);
}
static int float_cmp(void* p1, void* p2)//float型比较函数
{
    return *((float*)p1) > *((float*)p2);
}


void swap(void *p1, void *p2, int size)//任意类型通用交换函数
{
    char *p = (char *)p1;
    char *q = (char *)p2;
    while (size--)
    {
        *p ^= *q; 
        *q ^= *p; 
        *p ^= *q;
        q++;
        p++;
    }
}

void MySort(void *base, int count, int size, int(*cmp)(void *p1, void *p2))//任意类型通用排序
{
    int i = 0;
    int j = 0;
    int flag = 0;
    for (; i < count-1; i++)
    {
        flag = 0;
        for (j = 0; j < count - 1 -i; j++)
        {
            if (cmp( (char*)base+j*size , (char*)base + (j+1)*size ) > 0)
            {
                flag = 1;
                swap((char*)base + j*size, (char*)base + (j + 1)*size,size);
            }
        }
        if (flag == 0)
            break;
    }
}

void show_int(int *arr,int count)//int型输出函数
{
    for (int i = 0; i < count; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

void show_float(float *arr, int count)//float型输出函数
{
    for (int i = 0; i < count; i++)
    {
        printf("%f ", arr[i]);
    }
    printf("\n");
}

//主程序
int main()
{
    int arr1[10] = { 5,45,32,2,0,89,456,21,3556,51 };
    float arr2[10] = { 5.1,45.5,12.5,100.9,100.1,100.54,456.1,12.2,3556.0,45.2 };
    int count1 = sizeof(arr1) / sizeof(arr1[0]);
    int count2 = sizeof(arr2) / sizeof(arr2[0]);

    MySort(arr1, count1, sizeof(arr1[0]), int_cmp);
    MySort(arr2, count2, sizeof(arr2[0]), float_cmp);

    show_int(arr1,count1);
    show_float(arr2,count2);

    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值