高级排序2-快速排序
思路
- 0.每次执行前判断要排序的目标数组长度是否小于等于三,如果小那就不去执行快速排序,而是三个值交换位置即可。
- 1.每次选择三个值排序这三值是(第一个位置,中间位置,最后一个位置)。
- 2.选择中间位置作为枢纽,并把它的值交换到倒数第二个位置。
- 3.进行划分算法获得被划分的索引位置
- 3.1.左扫描从第二个位置开始把所有小于枢纽值的交换到扫描索引那里。
- 3.2.同时进行右扫描从倒数第三个位置(因为倒数第一个已经是大于枢纽,倒数第二个是枢纽),所有大于枢纽值的交换到扫描索引位置。
- 3.3.一直扫描到左右索引交替时把枢纽值(倒数第二个位置的值)交换到左扫描索引位置,并返回划分位置。
- 4.获得划分位置后得到左右两个子数组,左边是0到划分索引-1位置,右边是划分索引+1到数组末端,继续从0步骤开始递归操作。
QuickSort.java 具体实现
|
|
输出: 0 1 2 3 4 5 6 7 8 9 10 12 13 16 20 22 31 44 44 50 55 115 200
说明
- 1.计算要排序的数组长度如果小于等于3就手动排序值不去进行下一步骤排序,大于3时进行划分。
- 2.获取三个值(最左,最右,中间索引)的中间值,并排序三个值,把枢纽值交换到倒数第二个索引上。
- 3.划分算法,并获得划分索引位置,把所有小于枢纽值放在左边,大于枢纽值放到右边,并把枢纽值交换到划分索引位置。
- 4.划分左右两个子数组重复递归
注:该内容为Java数据结构和算法读后学习感悟