快速排序

该快速排序算法出自《算法导论》

思想是,先利用一个partition函数将数组中大于pivot的元素放到右边,小于等于pivot的元素放到左边,然后用pivot将两个部分分割,返回pivot的位置p,再对子数组[start, p - 1]和[p + 1, end]进行排序即可。代码如下:

void quickSort(vector<int>& nums, int start, int end) {
	if(start >= end)
		return;
	int p = partition(nums, start, end);
	quickSort(nums, start, p - 1);
	quickSort(nums, p + 1, end);
}

int partition(vector<int>& nums, int start, int end) {
	int i, j, pivot = nums[end];	// use the last element as pivot
	for(i = start - 1, j = start; j < end; j++) {	// i points to the last element that is smaller or equal to pivot
		if(nums[j] <= pivot)
			swap(nums[++i], nums[j]);
	}
	swap(nums[++i], nums[end]);		// put pivot in correct position
	return i;
}

你可能感兴趣的:(快速排序)