题解 | #升级版鸡尾酒排序算法#

冒泡排序

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]+" ");
    }
}

}

全部评论

相关推荐

评论
3
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务