【维基百科】鸡尾酒排序,也就是定向冒泡排序,鸡尾酒搅拌排序,搅拌排序(也可以视作选择排序的一种变形),涟漪排序,来回排序或快乐小时排序,是冒泡排序的一种变形。此算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。
import java.util.Arrays;
import java.util.List;
/**
* Created by sam on 2018/8/23.
*/
public class CockTailSort {
// 鸡尾酒排序
static List<Integer> cockTailSort(List<Integer> list) {
//因为是双向比较,所以比较次数为原来数组的1/2次即可。
for (int i = 1; i <= list.size() / 2; i++) {
//从前到后的排序 (升序)
for (int m = i - 1; m <= list.size() - i; m++) {
//如果前面大于后面,则进行交换
if (m + 1 < list.size() && list.get(m) > list.get(m + 1)) {
Integer temp = list.get(m);
list.set(m, list.get(m + 1));
list.set(m + 1, temp);
}
}
System.out.println("正向排序 =>\t" + Joiner.on(",").join(list));
//从后到前的排序(降序)
for (int n = list.size() - i - 1; n >= i; n--) {
//如果前面大于后面,则进行交换
if (n > 0 && list.get(n - 1) > list.get(n)) {
Integer temp = list.get(n);
list.set(n, list.get(n - 1));
list.set(n - 1, temp);
}
}
System.out.println("反向排序 =>\t" + Joiner.on(",").join(list));
}
return list;
}
public static void main(String[] args) {
List<Integer> list = Arrays.asList(6, 84, 8, 5, 7, 9, 7, 66, 845, 4, 963, 7415, 4155, 1, 96, 2);
CockTailSort h = new CockTailSort();
h.cockTailSort(list);
for (Integer i : list) {
System.out.print(i + ",\t");
}
}
}