首先两个for循环确定趟数和单次趟数
因为不确定排序的是 int,char 还是等等.....
所以把地址强制转换成char*(1字节)的地址然后 j(第几个元素) 乘上siz(我们传参过来的字节大小)就等于我们这个元素的位置的地址(包括这个字节大小)确定了
然后进行判断 如果是>0说明说明前面的那个数大 if条件成立 进入swap函数进行交换 如果<=0 那么 if 条件不成立就不交换
交换的时候地址传过去交换 一个字节一个字节的交换(因为是char类型 1字节);交换完进行下次循环
以下为代码
首先是我们的swap交换函数
void swap(char* a, char* b,int siz) {
for (int i = 0; i < siz; i++) {
char temp = *a;
*a = *b;
*b = temp;
a++;
b++;
}
}
模仿的 qsort 代码 和 main 程序入口
void fast_qsort(void* base, int num, int siz, int(*p)(const void*, const void*)) {
for (int i = 0; i < num - 1; i++) {
for (int j = i+1; j < num - 1; j++) {
if (p((char*)base + i * siz, (char*)base + j* siz)>0) {
swap((char*)base + i * siz, (char*)base + j * siz,siz);
}
}
}
}
int sss(const void* x, const void* y) {
return *(int*)x - *(int*)y;
}
int main() {
int arr[] = { 1,3,5,7,9,2,4,6,8,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
fast_qsort(arr, sz, sizeof(arr[0]), sss);
return 0;
}