快速排序
void quick_sort(int array[], int begin, int end)
{
if(end > begin)
{
int pivot = begin;
int last_small = begin;
int i = end;
while(last_small != i)
{
if(array[i] <= array[pivot])
{
int temp = array[i];
array[i] = array[++last_small];
array[last_small] = temp;
}
else
i--;
}
int tmp = array[pivot];
array[pivot] = array[last_small];
array[last_small] = tmp;
quick_sort(array, begin, last_small - 1);
quick_sort(array, last_small + 1, end);
}
}void adjust_heap(int[], int, int);
void build_heap(int array[], int size)//build the max-heap
{
for(int i = size - 1; i >= 0; i--)
{
adjust_heap(array, size, i);
}
}
void adjust_heap(int array[], int size, int element)//adjust the max-heap
{
int left = element * 2 + 1;
int right = left + 1;
while(right < size)
{
if(array[element] >= array[left] && array[element] >= array[right])
return;
if(array[left] >= array[right])
{
int tmp = array[left];
array[left] = array[element];
array[element] = tmp;
element = left;
}
else
{
int tmp = array[right];
array[right] = array[element];
array[element] = tmp;
element = right;
}
left = element * 2 + 1;
right = left + 1;
}
if(left < size && array[left] > array[element])
{
int tmp = array[left];
array[left] = array[element];
array[element] = tmp;
}
}
void heap_sort(int array[], int size)//heap sort
{
build_heap(array, size);
for(int i = size - 1; i > 0; i--)
{
int tmp = array[i];
array[i] = array[0];
array[0] = tmp;
adjust_heap(array, i, 0);
}
}
原文地址:http://blog.csdn.net/u012999424/article/details/39376235