模仿qsort的功能实现一个通用的冒泡排序(易理解版)

#include<stdio.h>
int cmp(const void *x, const void *y)
{
    return (*(int *)x) - (*(int *)y);
}

void Swap(char *p1, char *p2, int width)
{
    int i = 0;
    for (i = 0; i < width; i++)
    {
        char tmp = *p1;
        *p1 = *p2;
        *p2 = tmp;
        *p1++;
        *p2++;
    }
}
//Swap函数另一种写法
//void Swap(char *buf1,char *buf2,int width)
//{
//  int i = 0;
//  for (i = 0; i < width; i++)
//  {
//      char tmp = *(buf1 + i);
//      *(buf1 + i) = *(buf2 + i);
//      *(buf2 + i) = tmp;
//  }
//}

void qsort(void *base, int size, int width) //需要传类型及字节大小
 {
    int i = 0;
    int j = 0;
    int ret = 0;
    for (i = 0; i < size; i++)
    {
        for (j = 0; j < size - i - 1; j++)
        {
            if (cmp((char *)base + j*width, (char *)base + (j + 1)*width)>0)//强制转换为char*再通过加相应的的单位字节大小就可以实现逐对交换。
            {
            Swap((char *)base + j*width, (char *)base + (j + 1)*width, width);
            }
        }
    }
}

int main()
{
    int arr1[] = { 1, 2, 4, 6, 3, 2 };
    qsort(arr1, sizeof(arr1) / sizeof(arr1[0]), sizeof(arr1[0]));
    for (int i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++)
    {
        printf("%d ", arr1[i]);
    }
    getchar();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/c1029323236/article/details/80410927