鸡尾酒算法


【维基百科】鸡尾酒排序,也就是定向冒泡排序,鸡尾酒搅拌排序,搅拌排序(也可以视作选择排序的一种变形),涟漪排序,来回排序或快乐小时排序,是冒泡排序的一种变形。此算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。




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

 

posted @ 2018-08-23 14:34  打工人编号271  阅读(126)  评论(0)    收藏  举报