简介
快速排序和其他几种排序的方法相比它的效率较高,因此经常被使用。它由C.R.A.Hoare于1962年提出的一种划分交换排序。采用了一种分治策略,通常称其为分治法(Divide-and-ConquerMethod)。其时间复杂度为O(N*logN)
分治法的基本思想
将原问题分解为若干个规模更小但结构与原问题类似的子问题。递归这些子问题,然后将这些子问题的解组合为原问题的解。
快速排序的步骤
1、首先在数组中找出一个元素的数值,该值作为基准数。一般选择数组下标中间的数或第一个元素。
2、分区时将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3、再对分好的左右区间进行第2步骤,直到各区间只有一个数。
快速排序实现
public void QuickSort1(int[] array, int l, int r)
{
if (l < r)
{
int i = l, j = r;
int element = array[i];
while (i < j)
{
while (i < j && array[j] >= element)//找到小于element的数
j--;
if (i < j)
{
array[i] = array[j];
i++;//后一个元素
}
while (i < j && array[i] < element)//找到大于element的数
i++;
if (i < j)
{
array[j] = array[i];
j--;//前一个元素
}
}
array[i] = element;
QuickSort1(array, l, i - 1);//左区间
QuickSort1(array, i + 1, r);//右区间
}
}