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

Popular posts from this blog

Sudoku

Longest prefix matching - trie

Climbing Stairs