快速排序

℡╲_俬逩灬. 提交于 2020-01-14 04:50:02

快速排序的主要思想是partition思想,其大致内容如下:
1.随机选择基准值,一般是第一个数;
2.利用头尾指针,头指针负责找第一个比基准值大的数,尾指针负责找第一个比基准值小的数,交换两个指针的内容;
3.将基准值放到其应该属于的位置;
4.递归地进行以基准值分成的左右部分;

c++代码

//快速排序
void quick_sort(int arr[], int start, int end) {

	if (start < end) {
     	//partition过程
     	
		//基准值
		int key = arr[start];
		//前后扫描用的指针
		int left = start;
		int right = end;

		while (left < right) {

			//right从右向左负责找第一个比基准值小的值
			while (left<right && arr[right] >= key) {
				--right;
			}

			if (left < right)
				arr[left++] = arr[right];

			//left从左向右负责找第一个比基准值大的值
			while (left < right && arr[left] < key) {
				++left;
			}

			if (left < right)
				arr[right--] = arr[left];

		}

		//left>=right时
		//把基准值放到正确的位置;
		arr[left] = key;

		//将基准值左右两部分递归
		quick_sort(arr, start, left - 1);
		quick_sort(arr, left + 1, end);

	}
}

注意:每一次partition过程只是将小于基准值的放到基准值左边,大于基准值的放到右边。在一次partition完成后,实际上,基准值左侧的值并不是有序的,右侧也同样不是有序的。因此才需要递归,将剩下的无序部分变为有序。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!