记录一下快排的不同写法,updating...
#include <iostream>
#include <vector>
using namespace std;
class Solution {
private:
void swap(int& a, int &b)
{
int temp = a;
a = b;
b = temp;
}
int partition(vector<int>& nums, int l, int r)
{
if (l >= r)
return l;
int k = l + rand()%(r-l+1); // random in [l, r]
swap(nums[k], nums[r]);
int index = l - 1;
for (int i=l; i<r; ++i)
{
if (nums[i] < nums[r])
{
++index;
if (index != i)
{
swap(nums[i], nums[index]);
}
}
}
++index;
swap(nums[index], nums[r]);
return index;
}
public:
void qsort1(vector<int>& nums, int l, int r) //approach 1
{
int i = l, j = r;
int temp = nums[l];
while (i < j)
{
while (i < j && nums[j] >= temp)
--j;
nums[i] = nums[j];
while(i < j && nums[i] <= temp)
++i;
nums[j] = nums[i];
}
nums[i] = temp;
if (i-1 > l)
qsort1(nums, l, i-1);
if (i+1 < r)
qsort1(nums, i+1, r);
}
void qsort2(vector<int>& nums, int l, int r) //approach 2
{
if (l >= r)
return;
int index = partition(nums, l, r);
if (l < index - 1)
qsort2(nums, l, index - 1);
if (index + 1 < r)
qsort2(nums, index + 1, r);
}
};
int main()
{
Solution s;
vector<int> nums = {1,3,4,6,2,3,4,5,6,4,23,3,5,7,9,12,3,2,2,2,12};
// s.qsort1(nums, 0, nums.size()-1);
// for (int i=0; i<nums.size(); ++i)
// cout << nums[i] << " ";
// cout << endl;
// s.qsort2(nums, 0, nums.size()-1);
// for (int i=0; i<nums.size(); ++i)
// cout << nums[i] << " ";
// cout << endl;
return 0;
}