quick sort
/***
Quick
Sort
***/
#include<iostream>
using namespace std;
class quickSort {
public:
quickSort(int *a, int sz);
~quickSort() { }
void sort(int begin, int end);
void print();
private:
int *sa;
int size;
int partition(int begin, int end);
void exchange(int *a1, int *b1);
};
quickSort::quickSort(int *a, int sz) {
sa = a;
size = sz;
}
void quickSort::exchange(int *a1, int *b1) {
int temp;
temp = *a1;
*a1 = *b1;
*b1 = temp;
}
int quickSort::partition(int begin, int end) {
if(begin == end) return begin;
int val = sa[begin];
int i = begin, j = end+1;
while(1) {
while(sa[++i] < val) {
if(i == end) break;
}
while(sa[--j] > val) {
if(j == begin) break;
}
if(i >= j) break;
exchange(sa+i, sa+j);
}
exchange(sa+begin, sa+j);
return j;
}
void quickSort::print() {
for(int i = 0; i < size; i++) {
cout<<sa[i]<<" ";
}
cout << endl;
}
void quickSort::sort(int begin, int end) {
//base
case
if(begin >= end) return;
int pos = partition(begin, end);
sort(begin, pos-1);
sort(pos+1, end);
}
void main() {
int a[] = {3, 1, 4, 5, 2, 8, 6};
int size = sizeof(a) / sizeof(int);
quickSort st(a, size);
st.sort(0, size-1);
st.print();
}
Comments
Post a Comment