快速排序
Posted xero10
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序相关的知识,希望对你有一定的参考价值。
该快速排序算法出自《算法导论》
思想是,先利用一个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;
。
以上是关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章