核心
- 原型是void qsort(void* base,size_t num,size_t width,int(__cdeclcompare)(const void,const void*))
- 四个参数分别是 : 要排序的地址,元素个数,每个元素的大小,回调函数的地址
实现
void Swap(void* left, void* right,int size){
while (size){
char tmp = *(char*)left;
*(char*)left = *(char*)right;
*(char*)right = tmp;
size--;
((char*)left)++;
((char*)right)++;
}
}
int Cmp(const void* e1, const void* e2){//回调函数
return (*(int*)e1) > (*(int*)e2);
}
void MyQsort(void* left, int len, int size, int(*Cmp)(void*, void*)){
int i = 0;
int j = 0;
for (i = 0; i < len - 1; i++){//循环的趟数
for (j = 0; j < len - i - 1; j++){//每趟比较的次数
if (Cmp((char*)left + j * size, (char*)left + (j + 1) * size) > 0){//如果满足条件就进行交换
Swap((char*)left + j * size, (char*)left + (j + 1) * size, size);
}
}
}
}
int main () {
int arr[7] = { 1,3,2,4,3,6,4};
//qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), Cmp);
MyQsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), Cmp);
int i = 0;
for (i = 0; i < 7; i++){
printf("%d ", arr[i]);
}
return 0;
}