利用冒泡法来模拟qsort函数的实现,其中以字节为单位操作,例如交换两数位置
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <assert.h>
void swap(char* x, char* y, int size)//以字节为单位交换
{
for (int i = 0; i < size; i++)
{
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
}
int Comp(const void* x, const void* y)
{
int *x_ = (int*)x;
int *y_ = (int*)y;
if (*x_ > *y_)
{
return 1;
}
else if (*x_ < *y_)
{
return -1;
}
else return 0;
}
int show(int *arr, int num)
{
for (int i = 0; i < num; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
void Mysort(int* base, int num, int size, int(*Comp)(const void* x, const void* y))
{
assert(base);
assert(Comp);
char *_base = (char*)base;//以字节方式进行操作
for (int i = 0; i < num - 1; i++)
{
int flag = 0;//判断该数组中数是否已经有序,如是用break提前退出
for (int j = 0; j < num - i - 1; j++)
{
if (Comp(_base + size*(j), _base + size*(j + 1))>0)
{
flag = 1;
swap(_base + size*(j), _base + size*(j + 1),size);
}
if (flag == 0)
{
break;
}
}
}
}
int main()
{
int arr[10] = { 5, 5, 6, 8, 9, 5, 6, 1, 2, 4 };
int num = sizeof(arr) / sizeof(arr[0]);
show(arr,num);
Mysort(arr, num, sizeof(int), Comp);
printf("\n");
show(arr,num);
printf("\n");
system("pause");
return 0;
}
运行截图