分治法:
1.递归出口(采用递归形式)
2.把问题划分为若干形式相同,相互独立的子问题
3.(递归)求解子问题
4.合并子问题的解(分治算法的效率很大程度上依赖合并的实现)
#include <iostream>
#include<vector>
using namespace std;
void quicksort(vector<int> &v, int l, int r)
{
if (l >= r) { //递归出口
return;
}
else
{
int x = v[l];
int i = l, j = r;
while (i < j) //一次划分
{
while (i<j&&v[j]>x) j--; //右侧扫描
if (i < j)
v[i++] = v[j];
while (i < j&&v[i] < x) i++; //左侧扫描
if (i < j)
v[j--] = v[i];
}
v[i] = x;
quicksort(v, l, i - 1); //递归求解子问题1
quicksort(v, i + 1, r);//递归求解子问题2
}
}
int main()
{
vector<int> v;
int n;
while (cin >> n) //以任意非数字输入为结束
{
v.push_back(n);
}
quicksort(v, 0, v.size() - 1);
for (auto it = v.begin(); it != v.end(); it++)
cout << *it << " ";
}