#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Sort
{
public:
int* Partition(int arr[], int L, int R)
{
int less = L - 1;
int more = R;
int cur = L;
while(cur < R)
{
if(arr[cur] < arr[R])
swap(arr[cur++], arr[++less]);
else if(arr[cur] > arr[more])
swap(arr[cur], arr[more--]);
else
cur++;
}
swap(arr[less+1], arr[R]);
int* arrN = new int[2];
arrN[0] = less+1;
arrN[1] = more;
return arrN;
}
void QuickSort(int arr[], int L, int R)
{
if(arr != NULL && L < R)
{
int * arrP = Partition(arr, L, R);
QuickSort(arr, L, arrP[0] - 1);
QuickSort(arr, arrP[1] + 1, R);
}
}
};
class HeapSort
{
public:
void HeapInsert(int arr[], int index)
{
while(arr[index] > arr[(index-1)/2])
{
swap(arr, index, (index-1)/2);
index = (index - 1)/2;
}
}
void Heapify(int arr[], int index, int size)
{
int left = 2 * index + 1;
while(left < size)
{
int right = left + 1;
int maxIndex = right < size && arr[left] < arr[right] ? right : left;
maxIndex = arr[maxIndex] < arr[index] ? index : maxIndex;
if(maxIndex == index)
break;
swap(arr, maxIndex, index);
index = maxIndex;
left = 2 * index + 1;
}
}
void heapSort(int arr[], int arrSize)
{
if(arr != NULL && arrSize > 1)
{
for(int i=0; i<arrSize; i++)
HeapInsert(arr, i);
int size = arrSize;
swap(arr, 0, --size);
while(size > 0)
{
Heapify(arr, 0, size);
swap(arr, 0, --size);
}
}
}
void swap(int arr[], int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
HeapSort s;
int arr[] = {2, 1, 3, 6, 0, 4};
for(int i=0; i<6;i++)
cout << arr[i] << endl;
s.heapSort(arr, 6);
cout << endl;
for(int i=0; i<6;i++)
cout << arr[i] << endl;
system("PAUSE");
return 0;
}