/*
* test.cpp
*
* Created on: 2014-3-21
* Author: root
*/
#include <iostream>
#include <vector>
using namespace std;
class QuickSort {
private:
vector<int> vec;
public:
void init();
void traverse();
int partition(int p, int r);
void quickSort(int p, int r);
int getValue(int i);
void setValue(int i, int value);
void swap(int i, int j);
inline int getSize() {return vec.size();};
};
void QuickSort::quickSort(int p, int r) {
if (p < r) {
int q = partition(p, r);
quickSort(p, q-1);
quickSort(q+1, r);
}
}
void QuickSort::swap(int i, int j) {
if (i != j) {
int temp = getValue(i);
setValue(i, getValue(j));
setValue(j, temp);
}
}
int QuickSort::getValue(int i) {
vector<int>::iterator iter = vec.begin();
return *(iter+i);
}
void QuickSort::setValue(int i, int value) {
vector<int>::iterator iter = vec.begin();
*(iter+i) = value;
}
int QuickSort::partition(int p, int r) {
int i = p-1;
int j = p;
for (; j <= r-1; j++) {
if (getValue(j) <= getValue(r)) {
i++;
swap(i, j);
}
}
swap(++i, r);
return i;
}
void QuickSort::init() {
std::cout << "how many elements do you want to enter:";
int count;
std::cin >> count;
int element;
for (int i = 0; i < count; i++) {
std::cin >> element;
vec.push_back(element);
}
}
void QuickSort::traverse() {
for (vector<int>::iterator iter = vec.begin(); iter != vec.end(); iter++) {
std::cout << *iter << std::endl;
}
}
int main() {
QuickSort * qs = new QuickSort();
qs->init();
qs->quickSort(0, qs->getSize()-1);
qs->traverse();
delete qs;
}