目录
序言
快速排序
基本使用
参数解释
模拟实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
//这里整型是这样写的,但是比较其他数据就会变哈
int cmp_int(const void* e1,const void* e2)
{
return (*(int*)e1 - *(int*)e2);
}
//打印函数
void Print(int arr[],int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ",arr[i]);
}
}
//交换函数
void swap(void* p1, void* p2, size_t width)
{
int i = 0;
//因为要交换这么多长度次,所以要for循环
for (i = 0; i < width; i++)
{
char tmp = *((char*)p1 + i);
*((char*)p1 + i) = *((char*)p2 + i);
*((char*)p2+i) = tmp;
}
}
void bubble_qsort(void* base, size_t num, size_t width, int(* cmp)(const void* e1, const void* e2))
{
int i = 0;
int j = 0;
for (i = 0; i < num; i++)
{
for (j = 0; j < num-i-1; j++)
{
//强制类型转换为char* 这里加上j*width值得注意
if (cmp((char*)base + j*width, (char*)base + (j + 1)*width)>0)
swap((char*)base + j * width, (char*)base + (j + 1) * width,width);
}
}
}
int main()
{
int arr[] = { 1,3,2,5,7,9,8,4,6 };
int sz = sizeof(arr) / sizeof(arr[0]);
//qsort(arr, sz, sizeof(int), cmp_int);
bubble_qsort(arr, sz, sizeof(int), cmp_int);
Print(arr, sz);
return 0;
}