#include <stdio.h>
#include <vector>
#include <iostream>
using namespace std;
int cnt = 0;
int partion(vector<int> &A, int start, int end)
{
if(end <= start)
return 0;
int endV = A[end];
int i = start ;
int j = start + 1;
for(j = start; j < end; j++)
{
if(A[j] <= endV)
{
//put this value to the prev index of array
int tmp = A[i];
A[i] = A[j];
A[j] = tmp;
i++;
}
}
//put this value to the prev index of array
if(i == start && A[i] > A[end])
{
int tmp = A[i];
A[i] = A[end];
A[end] = tmp;
}
printf("%s(%d), %d, %d, %d, %d\n", __FILE__, __LINE__, start, end, i, A[end]);
for(int k = start; k <= end; k++)
{
printf("<%d, %d>\n", k, A[k]);
}
return i;
}
int quickSort(vector<int> &A, int p, int r)
{
if(p < r - 1)
{
int parting = partion(A, p, r);
cnt++;
if(cnt == 10)
{
// return 0;
}
quickSort(A, p, parting-1);
quickSort(A, parting, r);
}
return 0;
}
int main()
{
vector<int> A;
A.resize(14);
A ={27, 17, 3, 16, 13, 10, 1, 5, 7, 12, 4, 8, 9, 0};
for(auto entry:A)
{
cout << entry<<endl;
}
printf("**************************\n");
quickSort(A, 0, A.size()-1);
for(auto entry:A)
{
cout << entry<<endl;
}
printf("**************************\n");
return 0;
}