一. 概念
- 冒泡排序:每一轮排序都是从左到右的单向进行元素的比较。点此回顾冒泡排序
- 鸡尾酒排序:(1)奇数轮比较时,从左到右把相邻的两个元素进行比较,当一个元素大于右侧相邻元素时,交换他们的位置;否则,位置不变。 (2)偶数轮比较时,从右到左把相邻的两个元素进行比较,当一个元素小于左侧相邻元素时,交换他们的位置;否则,位置不变。
二. Java实现
-
代码
import java.util.Arrays; public class MySort { public static void sort (int[] array) { int temp = 0; for (int i = 0; i < array.length / 2; i++) { //有序标记,每一轮的初始值都是true boolean isSorted = true; //奇数轮,从左向右比较和交换 for (int j = i; j < array.length - 1 - i; j++) { if(array[j] > array[j+1]) { temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; //有元素交换,故不是有序序列,标记为false isSorted = false; } } if (isSorted) { break; } //偶数轮之前,把重新把sSorted标记为true isSorted = true; //偶数轮,从右向左比较和交换 for (int j = array.length - 1 - i; j > i; j--) { if(array[j] < array[j-1]) { temp = array[j]; array[j] = array[j-1]; array[j-1] = temp; //有元素交换,故不是有序序列,标记为false isSorted = false; } } if (isSorted) { break; } } } public static void main(String[] args) { int[] array = new int[] {5,8,6,3,9,2,1,7}; sort(array); System.out.println(Arrays.toString(array)); } }
-
运行结果
[1, 2, 3, 5, 6, 7, 8, 9]