以下对啊哈算法中,作者对多次交换优化的方面做了阐述:
1、代码的核心是 一定一定要从右边先开始,因为在最后结束的时候代码的判定是将左侧的下表为i的数据移到原本的基准下表处,也就是start;
2、同时if的排定条件一定是 < 用来交换排序的两个数,如果是 <=那么会在最后一个相遇的时候,出现不必要的操作;
3、为什么不查到一次就交换一次呢?
因为:你会发现在左右各进行了一次交换操作的时候,对原本基准点的操作等同于没有进行修改,故而优化一次写入,加快运行速度
package jvm;
public class fastsort {
static int[] a = {1,54,6324,4312,12,21};
public static void sort(int start, int end) {
if(start > end)
return;
// 存取一个基准数
int temp = a[start];
int i = start ;
int j = end;
while(i != j ) {
// 一定要先从右往左开始 ,否则会发生数组越界,为的是处理最后相遇的情况判断
while(a[j] >= temp && i<j) j--;
while(a[i] <= temp && i<j) i++;
// 如果没有相遇那么就要交换2个否则就只是换基准数和当前相遇位置
if(i < j) {
int mem = a[j];
a[j] = a[i];
a[i] = mem;
}
a[start] = a[i];
a[i] = temp;
// 基准数不要在动了
sort(start, i-1);
sort(i+1, end);
}
}
}