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

来源:互联网 发布:java实用教程第四版pdf 编辑:程序博客网 时间:2024/06/05 02:30

代码实现(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;}