18.0、C语言——自定义qsort()函数
//两个元素交换
void swap(char* e1,char* e2,int width) {
int i = 0;
for (i = 0;i < width;i++) {
char tmp = *e1;
*e1 = *e2;
*e2 = tmp;
e1++;
e2++;
}
}
//冒泡排序
void bubble_myqsort(void* arr, int arrSize, int width, int (*myCmp)(const void* e1, const void* e2)) {
int i = 0;
//确定要比较多少趟
for (i = 0;i < arrSize - 1;i++) {
int j = 0;
//确定每趟要比较的对数
for (j = 0;j < arrSize-1-i;j++) {
if (myCmp((char*)arr + j * width, (char*)arr + (j + 1) * width) > 0) {
//交换
swap((char*)arr + j * width, (char*)arr + (j + 1) * width,width);
}
}
}
}
//int类型数组的比较方式,
int com_int(const void* e1, const void* e2) {
//这里由于void类型的指针不能进行解引用符操作,
//所以先将他们强制类型转换为int*类型再进行解引用符操作
return *(int*)e1 - *(int*)e2;
}
int main() {
int arr[10] = {9,8,7,6,5,4,3,2,1,0};
int arrSize = sizeof(arr) / sizeof(arr[0]);
bubble_myqsort(arr, arrSize,sizeof(arr[0]), com_int);
int i = 0;
for (i = 0; i < arrSize;i++) {
printf("%d\n",arr[i]);
}
return 0;
}