题解 | #升级版鸡尾酒排序算法#
冒泡排序
http://www.nowcoder.com/practice/83ef53227d654df28c18fd6a377e8fee
冒泡排序升级版:鸡尾酒排序算法
优化思路:
1.根据一轮内是否发生交换判断是否已经有序
2.根据一轮内最后一次发生交换的位置界定有序区
3.鸡尾酒排序:交替方向(每轮内先从左到右,再从右到左)
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void bubbleSort(int[] array){
int temp = 0;
int startsortlength = 0; // 从左往右起始有序区
int endsortlength = array.length - 1; // 从右到左起始有序区
int startExchangeIndex = 0; // 从左到右发生交换的位置
int endExchangeIndex = array.length-1; // 从右到左发生交换的位置
// 交替方向:从左到右,从右到左,注意好起末位置!
for(int i=0;i<array.length/2;i++) {
boolean isSorted = true;
for(int j=startsortlength;j<endsortlength;j++) {
if(array[j] > array[j+1]) {
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
startExchangeIndex = j;
isSorted = false;
}
}
if(isSorted) break;
endsortlength = startExchangeIndex;
for(int k=endsortlength;k>startsortlength;k--) {
if(array[k] < array[k-1]) {
temp = array[k];
array[k] = array[k-1];
array[k-1] = temp;
endExchangeIndex = k;
isSorted = false;
}
}
startsortlength = endExchangeIndex;
if(isSorted) break;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr = new int[7];
for (int i = 0; i < arr.length; i++) {
arr[i] = scanner.nextInt();
}
scanner.close();
//write your code here......
bubbleSort(arr);
for (int k = 0; k < arr.length; k++) {
System.out.print(arr[k]+" ");
}
}
}

