【排序算法】雞尾酒排序的實現與分析

以升序排序爲例:

  • 算法思路

雞尾酒排序即雙向的冒泡排序是冒泡排序的輕微變形。

它的主要思路是對於一組無規律排放的數字,先找到最大的數字放到最後一位,在反向找到最小的數字放到第一位。然後再找第二大的數字放到倒數第二位,再找第二小的數字放到第二位。以此類推,直到所有數字有序排列。

  • 代碼實現
public class CocktailSort {
	public static void main(String args[]) {  
		int[] numbers={-1, 0, 50, 44, -90};
		sort(numbers);
		for(int number : numbers) { 
			System.out.println(number); 
		} 
	}
	static void sort(int[] numbers){
		int temp;
		int m=0,n=numbers.length-1;
		while(m<n){
			for(int i=m; i<n;i++){
				if(numbers[i]>numbers[i+1]){
					//交換數組中兩個數字的位置
					temp=numbers[i];
					numbers[i]=numbers[i+1];
					numbers[i+1]=temp;
				}
			}
			n--;
			for(int i=n; i>m;i--){
				if(numbers[i]<numbers[i-1]){
					//交換數組中兩個數字的位置
					temp=numbers[i];
					numbers[i]=numbers[i-1];
					numbers[i-1]=temp;
				}
			}
			m++;
		}	
	}
}
  • 複雜度分析

對於雞尾酒排序,算法的時間複雜度與空間複雜度顯然與上一篇的冒泡排序相同。
不同的是排序的交換次數。某些情況下雞尾酒排序比普通冒泡排序的交換次數少。比如{2,3,4,1},雞尾酒排序只需交換2次,而冒泡排序需要三次。
總體上,雞尾酒排序可以獲得比冒泡排序稍好的性能。但是完全逆序時,雞尾酒排序與冒泡排序的效率都非常差。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章