#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int cmp_by_int(void*start, void* end)
{
return *((int*)start) - *((int*)end) ;
}
void swap(char* e1, char* e2, int width)//对需要排序的部分一个字节一个字节进行交换
{
char tmp;
while (width--)//width代表一个需交换元素的字节大小,即需要交换的次数
{
tmp = *e1;
*e1 = *e2;
*e2 = tmp;
e1++;
e2++;
}
}
void My_qsort(void* parr, int length, int width, int(*cmp)(void*, void*)) //void* 的指针可接收任意类型元素
{
//内部用一个冒泡排序来实现对任意类型的交换
int i = 0;
for (i = 0; i < length - 1 ; i++)//确认躺数
{
int j = 0;
for (j = 0; j < length - i - 1; j++)//每趟交换次数
{
if (cmp((char*)parr + j*width, (char*)parr + (j + 1)*width)>0) //(char*)parr + (j + 1)*width)代表下一个元素的起始地址
swap((char*)parr + j*width, (char*)parr + (j + 1)*width, width);
}
(char*)parr += width;//头指针指向下一个元素
}
}
int main()
{
int arr[10] = { 0, 4, 6, 4, 8, 14, 9, 4, 36, 89 };
int length = sizeof(arr) / sizeof(arr[0]);
int width = sizeof(int);
My_qsort(arr, length, width, cmp_by_int);
int i = 0;
for (i = 0; i < 10;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
c语言实现qsort
最新推荐文章于 2023-07-14 18:07:10 发布