方法一:
#include <iostream>
#include <vector>
using namespace std;
void Quick_Sort(vector<int> &data, int left, int right)
{
if (left < right)
{
int i = left, j = left;
int pivot = data[right];
for (j = left; j < right; j++)
{
if (data[j] < pivot)
{
swap(data[i], data[j]);
++i;
}
}
data[j] = data[i];
data[i] = pivot;
Quick_Sort(data, left, i - 1);
Quick_Sort(data, i + 1, right);
}
}
int main()
{
vector<int> vec;
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int a;
cin >> a;
vec.push_back(a);
}
cout << "排序前:";
for (auto c : vec)
cout << c << " ";
cout << endl;
Quick_Sort(vec, 0, vec.size() - 1);
cout << "排序后:";
for (auto c: vec)
cout << c << " ";
system("pause");
return 0;
}
算法二:
#include <iostream>
#include <vector>
using namespace std;
void Quick_Sort(vector<int>& data, int left, int right)
{
if (left < right)
{
int i = left, j = right;
int pivot = data[j];
while (i < j)
{
while (i < j && data[i] <= pivot) // 从左往右找到第一个比 pivot 大的数
i++;
if (i < j)
data[j--] = data[i];
while (i < j && data[j] >= pivot) // 从右往左找到第一个比 pivot 小的数
j--;
if (i < j)
data[i++] = data[j];
}
data[i] = pivot;
Quick_Sort(data, left, i - 1);
Quick_Sort(data, i + 1, right);
}
}
int main()
{
int n;
cin >> n;
vector<int> data;
for (int i = 0; i < n; ++i)
{
int a;
cin >> a;
data.push_back(a);
}
Quick_Sort(data, 0, data.size() - 1);
for (auto c : data)
cout << c << " ";
return 0;
}