模拟实现qsort

核心

  • 原型是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;
}
发布了60 篇原创文章 · 获赞 5 · 访问量 2647

猜你喜欢

转载自blog.csdn.net/qq_44905386/article/details/100010638