qsort实现一个通用的冒泡排序

通用冒泡排序算法

通过对冒泡排序法的学习,我们已经掌握了基本的qsort排序,但是如何把参数不同的数据通过一个qsort函数来排序呢,这就需要我们更深层次的理解qsort冒泡排序算法。

#include<stdio.h>
#include<stdlib.h>
int cmp(const void*n1, const void*n2){
    return *(char*)n1 - *(char*)n2;
}
void swap(char*buf1,char*buf2,int width){
    int i = 0;
    for (i = 0; i < width; i++){
        char tmp = *buf1;
        *buf1 = *buf2;
        *buf2 = tmp;
        buf1++;
        buf2++;
    }
}
void bubble_sort(void*base, int sz, int width, int(*cmp)(const void*n1, const void*n2)){
    int i = 0;
    for (; i < sz - 1; i++){
        int j = 0;
        for (; j < sz - 1 - i; j++){
            int ret = cmp(((char*)base + (j*width)), ((char*)base + (j + 1)*width));
            if (ret>0){
                swap(((char*)base + (j*width)), ((char*)base + (j + 1)*width), width);
            }
        }
    }
}
int main(){
    int arr[] = { 5, 4, 3, 2, 1, };
    bubble_sort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), cmp);
    int i = 0;
    for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){
        printf("%d", arr[i]);
    }
    char arr1[] = { 'b', 'i', 't', '!' };
    bubble_sort(arr1, sizeof(arr1) / sizeof(arr1[0]), sizeof(arr1[0]), cmp);
    for (i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++){
        printf("%c", arr1[i]);
    }
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/xy294636185/article/details/80344583