前言
最近algorithm调的蛮happy,灵光一闪想实现下quicksort。
关于quicksort的基本原理和实现以及相关的参考资料,我找到两篇不错的:
基本原理:
知乎发现的
实现思路:
别人截的stl源码
我个人的实现代码
void quicksort(vector<int>::iterator begin, vector<int>::iterator end)
{
if (begin == (end - 1))return;
vector<int>::iterator left = begin; vector<int>::iterator right = end-1;
int k = *left;
while (left < right)
{
while (left<right && *right>=k)right--; *left = *right;
while (left < right && *left <= k)left++; *right = *left;
}
*left = k;
if(left!=(end-1))quicksort(left + 1, end);
if(begin!=left)quicksort(begin, left);
}
void quicksort(vector<int>& nums1, int begin, int end)
{
if (begin >= end)return;
int left = begin; int right = end; int k = nums1[left];
while (left < right)
{
while (left < right && nums1[right] >= k)right--; nums1[left] = nums1[right];
while (left < right && nums1[left] <= k)left++; nums1[right] = nums1[left];
}
nums1[left] = k;
quicksort(nums1, begin, left - 1); quicksort(nums1, left + 1, end);
}