雞尾酒排序

雞尾酒排序,也叫雙向冒泡排序,是冒泡排序的一個變形。數組

使用雞尾酒排序爲一 列數字進行排序的過程能夠經過右圖形象的展現出來:
數組中的數字本是無規律的排放,先找到最小的數字,把他放到第一位,而後找到最大的數字放到最後一位。而後再找到第二小的數字放到第二位,再找到第二大的數字放到倒數第二位。以此類推,直到完成排序。

冒泡排序每次都從低到高,一個方向排,雞尾酒排序,從低到高,而後從高到低的排序,會獲得比冒泡排序更好的性能。在亂序數列中,冒泡和雞尾酒排序效率都不理想。性能

因爲雞尾酒排序是雙向的,因此最多須要原來數組的1/2次就能夠了,但有時候不用非要比較到最後,就已經排好序了,後面的排序過程能夠省略,因此引入一個變量記錄是否還有數字交換,若是沒有就提早退出。spa

也能夠每次都將排序的規模減少,由於每一個排序完,首尾都已經排序完成了。code

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++;
        }    
    }
}
相關文章
相關標籤/搜索