
package random;
public class quickSort {
public static void sort(int[] a, int first, int last) {
if (first >= last || a == null || a.length <= 1) {
return; //每一趟结束的条件
}
int i = first;
int j = last;
int index = a[first]; // 以第一个数49作为基准
while (i != j) {
//从右往左扫描,找到第一个比49小的元素,并交换
while (i < j && a[j] >= index) {
j--;
}
//找到之后交换
if (i < j) {
a[i++] = a[j];
}
//从左往右扫描,找到第一个比49大的元素,并交换
while (i < j && a[i] < index) {
i++;
}
//找到之后交换
if (i < j) {
a[j--] = a[i];
}
}
a[i] = index;
sort(a, first, i - 1); // 对低子表进行递归排序
sort(a, i + 1, last); // 对高子表进行递归排序
}
}
改进思路:
-
分而治之时候,分到了最后,数组已经很小,这时候采用插入排序代替快速排序。
-
基准值的选取,随机拿出3个数,取中间大小的为基准值。
-
取三个变量切分数组,将数组分为大于,等于,小于基准元素三部分,这样在递归时就可以剔除相等的元素,减小比较的次数
本文深入探讨了快速排序算法的基本实现原理,包括基准值选择、分区操作及递归调用。并通过采用插入排序替代快速排序处理小数组、随机选取基准值和三分快排等策略,进一步优化了算法性能。
58万+

被折叠的 条评论
为什么被折叠?



