排序的思路:主要采用左小右大的原则向两边移动,而在移动前会保证右边数一定大于左边数,这样每次大小比较只需要各负责一半遍历比较,不需要遍历所有的数据,具体实现如下:
public static void fastBubble(int[] data){
long startTime,endTime;
int end = data.length-1;
int tmpl;
int start = 0;
int minCur,maxCur;
startTime = System.nanoTime();
while(start < end-1){
minCur = start;
maxCur = end;
for(int mi=start,mx=end;mx-mi>=0;mi++,mx--){
if(data[mi] > data[mx]){
tmpl = data[mi];
data[mi] = data[mx];
data[mx] = tmpl;
}
if(data[mi]<data[minCur]) minCur = mi;
if(data[mx]>data[maxCur]) maxCur = mx;
}
if(minCur != start){
tmpl = data[minCur];
data[minCur] = data[start];
data[start] = tmpl;
}
if(maxCur != end){
tmpl = data[maxCur];
data[maxCur] = data[end];
data[end] = tmpl;
}
start++;
end--;
}
endTime = System.nanoTime();
System.out.print("排序后是:");
for(int va:data){
System.out.print(va+" ");
}
System.out.println();
System.out.println("排序使用时间:"+(endTime-startTime));
}
经过测试,在传统的冒泡算法中,该冒泡算法效率最高!