void QuickSort(int array[], int low, int high)
{
int i = low;
int j = high;
if (i >j)
return;
int temp = array[low];
while (i != j)
{
while (i < j && array[i] <= temp)
i++;
while (i < j && array[j] >= temp)
j--;
if (i < j)
swap(array[i], array[j]);
}
swap(array[low], array[i]);
QuickSort(array, low, i - 1);
QuickSort(array, i + 1, high);
}
堆排序
void Swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void AdjustDown(int arr[], int size, int root)
{
int left = 2 * root + 1;
int right = 2 * root + 2;
int max;
if (left >= size)
{
return;
}
if (right<size && arr[right]>arr[left])
{
max = right;
}
else
{
max = left;
}
if (arr[root] >= arr[max])
{
return;
}
Swap(arr + root, arr + max);
AdjustDown(arr, size, max);
}
void CreateHeap(int arr[], int size)
{
for (int i = size - 1 - 1 / 2; i >= 0; i--)
{
AdjustDown(arr, size, i);
}
}
void HeapSort(int arr[], int size)
{
CreateHeap(arr, size);
for (int i = 0; i < size; i++)
Swap(arr, arr + size - i - 1);
AdjustDown(arr, size - i - 1, 0);
}