快速排序
快速排序算法一种最常见的排序算法,其核心思想就是 分治 ,具体的:
1) 选定一个基准数;
2) 分区,将所有大于基准数的数据分为一区,将所有小于等于基准数的数据分为一区;
3) 递归,对上述分区重复(1)(2),直到每个分区只有一个数。
下面看一个动画来快速理解该算法是怎么工作的:
void QuickSort(int *array, int low, int high)
{
if (low < high)
{
int pivotloc = Partition(array, low, high);
QuickSort(array, low, pivotloc - 1);
QuickSort(array, pivotloc + 1, high);
}
}
int Partition(int *array, int low, int high)
{
int pivotkey = array[low];
array[0] = array[low];
while (low < high)
{
while (low < high && array[high] >= pivotkey)
{
high--;
}
array[low] = array[high];
while (low < high && array[low] <= pivotkey)
{
low++;
}
array[high] = array[low];
}
array[low] = array[0];
return low;
}