快排啦

一个小小的快排程序,num:为待排序数组,l:为数组第一个元素的地址,r:为数组最后一个元素的地址。

void quickSort(vector<int> &num, int l, int r) {
	if (l >= r)     //先检查左右条件
		return;
	int i = l, j = r, x = num[l];
	while (i < j) {
		while (i < j && num[j] >= x)//从右向左找到第一个小于x的
			j--;
		if (i < j)
			num[i++] = num[j];//由于num[i]的值已经存在x中,可直接覆盖num[i]的值
		while (i < j && num[i] <= x)//从左向右找第一个大于x的数
			i++;
		if (i < j)
			num[j--] = num[i];
	}
	num[i] = x;     //把最开始取出来的x放到i处
	quickSort(num, l, i - 1);//以i为中间值,分左右两部分递归调用
	quickSort(num, i + 1, r);
}

猜你喜欢

转载自blog.csdn.net/Meixueer_Lily/article/details/89189659