1、基本思想:
快速排序也是一种交换排序,它是通过一次排序将数组分割成两部分,其中的一部分都比另一部分的所有数据都要小
2、算法描述:
假设有数组arr[n],升序排列。
- 快速排序首先要有一个基准值,一般选择使用数组第一个元素。
- 首先数组从右往(j=n-1)左查找比基准值小的元素a,找到后,再从左往(i=0)右查找比基准值大的元素b,找到后交换a、b。直到i=j。
- 前两步执行完成,数组就变成了,基准值左边的数都比基准值小,基准值右边的数都比基准值大。也就是说本次所使用的基准值已经在正确的位置上。这一过程被称为一趟排序。
- 将基准值左边的元素作为一个数组,右边的元素作为一个数组,分别递归执行前三步。直到没有数组可以执行。
- 排序算法每一趟排序的目的都是将基准值放到正确的位置。所有的基准值都放在了正确的位置,排序也就完成了。
完整排序步骤如下图,快速排序就是不断将基准值放到正确的位置,并按照基准值所在位置将数组拆分,对子数组分别进行快速排序。
将每个拆分出来的子数组的基准值放在正确的位置,快速排序就完成了。
3、Java实现:
|
|