#include<iostream>
#include<vector>
#include<string>
#include<sstream>
#include<algorithm>
#include<list>
#include<stack>
#include<set>
#include<map>
using namespace std;
void merge(vector<int> & data, int start, int mid, int end)
{
}
void sort(vector<int> & data, int start,int end ) {
if (start >= end) {
return;
}
int mid = (start + end) / 2;
if (data[start] < data[mid])
swap(data[start], data[mid]);
if(data[start] < data[end])
swap(data[start], data[end]);
if(data[mid] <data[end])
swap(data[mid], data[end]);
swap(data[mid], data[end]);
int temp = data[end];
int i = start, j = end-1;
while (i < j) {
while ( i<end - 1 && data[i] <=temp) {
++i;
}
while (j >= 0 && data[j] >= temp) {
--j;
}
if (i >= j) {
swap(data[i], data[end]);
mid = i;
break;
}
swap(data[i], data[j]);
}
sort(data, start, mid - 1);
sort(data, mid + 1, end);
}
int main() {
vector<int> data= { 1,1,2,1,13,1,1,31,1,1,1};
for (int i = 0; i < data.size(); i++) {
cout << data[i]<<' ';
}
cout << endl;
sort(data,0,data.size()-1);
for (int i = 0; i < data.size(); i++) {
cout << data[i] << ' ';
}
cin.get();
return 0;
}