模拟实现标准库函数qsort
先来看看(点击进入)–> 标准库函数qsort的使用
(采用冒泡排序的方式实现my_qsort)
//由小到大排序
int compare_smallTolarge(const void* a, const void* b)
{
return (*(int*)a - *(int*)b);
}
//由大到小排序
int compare_largeTosmall(const void* a, const void* b)
{
return (*(int*)b - *(int*)a);
}
//交换a与b的值,char类型是一个字节,size代表了base里面元素类型的字节大小
void swop(const void* a, const void* b, int size)
{
for (int i = 0; i < size; i++)
{
char tem = *((char*)a + i);
*((char*)a + i) = *((char*)b + i);
*((char*)b + i) = tem;
}
}
void my_qsort(void* base, size_t num, size_t size, int (*compar)(const void*, const void*))
{
for (int i = 0; i < num - 1; i++)
{
for (int j = 0; j < num - 1 - i; j++)
{
//size就是指针一一步的步长
if (compar((char*)(base)+j * size, (char*)(base)+(j + 1) * size) > 0)
{
swop((char*)(base)+j * size, (char*)(base)+(j + 1) * size, size);
}
}
}
}
void main()
{
int values[] = { 40, 10, 100, 90, 20, 25 };
int n = sizeof(values) / sizeof(values[0]);
printf("原始数组:");
for (int i = 0; i < n; i++)
printf("%d ", values[i]);
printf("\n");
printf("由小到大:");
my_qsort(values, n, sizeof(int), compare_smallTolarge);
for (int i = 0; i < n; i++)
printf("%d ", values[i]);
printf("\n");
printf("由大到小:");
my_qsort(values, n, sizeof(int), compare_largeTosmall);
for (int i = 0; i < n; i++)
printf("%d ", values[i]);
}