#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
using namespace std;
//快速排序
//时间复杂度O(N*logN)
//额外空间复杂度O(logN)
int Random_mum(int len)
{
srand((unsigned)time(NULL));
return rand() % len;
}
void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
int *Quick_Sorts(vector <int> &num_s, int left, int right)
{
int mun0 = num_s[right];
int p = left - 1;
int q = right;
int curr = left;
while(curr < q)
{
if(num_s[curr] < mun0)
swap(num_s[++p], num_s[curr++]);
else if(num_s[curr] > mun0)
swap(num_s[--q], num_s[curr]);
else
curr++;
}
swap(num_s[curr], num_s[right]);
int *temp_s = new int [2];
temp_s[0] = ++p;
temp_s[1] = q;
return temp_s;
}
void Quick_Sort(vector <int> &num_s, int left, int right)
{
if (left >= right)
return ;
swap(num_s[left + Random_mum(right - left + 1)], num_s[right]);//left 下标不要忘
int *temp_s = new int [2];
temp_s = Quick_Sorts(num_s, left, right);
Quick_Sort(num_s, left, temp_s[0] - 1);
Quick_Sort(num_s, temp_s[0] + 1, right);
}
void QuickSort(vector <int> &num_s)
{
if(num_s.size() <= 1)
return ;
int left = 0;
int right = num_s.size() - 1;
Quick_Sort(num_s, left, right);
}
int main()
{
int num0;
vector <int> num_s;
while (cin >> num0)
num_s.push_back(num0);
cout << "the original data is: " << endl;
for (int i = 0; i < num_s.size(); i++)
cout << num_s[i] << ' ';
cout << endl << "the Quick_Sort data is: " << endl;
QuickSort(num_s);
for (int i = 0; i < num_s.size(); i++)
cout << num_s[i] << ' ';
system("pause");
return 0;
}
C++排序(5)——快速排序
猜你喜欢
转载自blog.csdn.net/Cris_7/article/details/82836708
今日推荐
周排行