引言:
什么是鸡尾酒排序?
鸡尾酒排序
鸡尾酒排序:也是对冒泡排序的一种优化,例如对于这样的数组2,3,4,5,6,7,1,8
如果使用普通的冒泡排序,需要七轮才能将1排到第一
而鸡尾酒排序,解决了这样的问题
通过:奇数轮正向遍历,偶数轮逆向遍历 ,这样第二轮就可以将1排到左边了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| import java.util.Arrays;
public class Cocktail {
public static void sort(int[] arr) { int change = 0 , cycle = 0; int temp ; for (int i = 0; i < arr.length / 2; i++) { boolean isSorted = true; for (int j = i; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; isSorted = false; change++; } cycle++; } if (isSorted) { break; } isSorted = true; for (int j = arr.length - i - 1; j > i ; j--) { if (arr[j] < arr[j - 1]) { temp = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = temp; isSorted = false; change++; } cycle++; } if (isSorted) { break; } } System.out.println("循环:"+cycle + ",交换:"+change); }
public static void main(String[] args) { int[] arr = new int[]{2, 3, 4, 5, 6, 7, 1, 8}; sort(arr); System.out.println(Arrays.toString(arr)); } }
|
优点:
对于类似示例的数组,排序很方便,很快速
缺点:
代码量翻倍