通用冒泡排序算法
通过对冒泡排序法的学习,我们已经掌握了基本的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;
}