#include<iostream>
#include<vector>
#include<stack>
using namespace std;
int partion1(vector<int>& arr, int left,int right)
{
int keyi = left;
while (left < right)
{
while (left < right && arr[right] >=arr[keyi])
{
right--;
}
while (left < right && arr[left] <= arr[keyi])
{
left++;
}
swap(arr[left], arr[right]);
}
swap(arr[keyi], arr[left]);
return left;
}
int partion2(vector<int>& arr, int left, int right)
{
int keyi = left;
int prev = left;
int cur = prev + 1;
while (cur <= right)
{
if (arr[cur] < arr[keyi]&&(++prev)!=cur)
{
swap(arr[prev], arr[cur]);
}
cur++;
}
swap(arr[keyi], arr[prev]);
return prev;
}
void QuickSort(vector<int>& arr, int left,int right)
{
if (left >= right)
return;
int keyi = partion2(arr, left, right);
QuickSort(arr, left, keyi - 1);
QuickSort(arr, keyi + 1, right);
}
void QuickSortR(vector<int>& arr, int left, int right)
{
stack<int> st;
st.push(left);
st.push(right);
int keyi = 0;
while (!st.empty())
{
int end = st.top();
st.pop();
int begin = st.top();
st.pop();
keyi = partion1(arr, begin, end);
if (keyi+1 < end)
{
st.push(keyi + 1);
st.push(end);
}
if (begin<keyi-1)
{
st.push(begin);
st.push(keyi-1);
}
}
}
int main()
{
vector<int> arr = { 4,1,7,5,2,10,8,15,9,7 };
int sz = arr.size()-1;
QuickSort(arr, 0, sz);
for (auto& e : arr)
{
cout << e << " ";
}
cout << endl;
return 0;
}
快速排序的递归和非递归
最新推荐文章于 2024-07-23 22:52:19 发布