雞尾酒排序

雞尾酒排序(雙端冒泡排序)


雞尾酒排序也叫定向冒泡排序,攪拌排序等,是冒泡排序的一種變形。雞尾酒排序是在兩端開始排序的,而冒泡排序時在一端進行的。


雞尾酒排序的C++實現:

 


/****************************
 *Name:雞尾酒排序.cpp(雙端冒泡排序)
 *Tags:排序
 *Note:
 *****************************/
 
#include<iostream>
#defineMAX_SIZE 1000
usingnamespace std;
 
intCocktailSort(int *, int, int);
 
intmain()
{
      int nums[MAX_SIZE];
      int i, len;
      cout << "Input the number ofthe numbers: ";
      cin >> len;
      for(i = 0; i < len; i++) {
            cin >> nums[i];
      }
      CocktailSort(nums, 0, len); //雞尾酒排序
      cout << "The result of thesort process is :" << endl;
      for(i = 0; i < len; i++) {
            cout << nums[i] << " ";
      }
      cout << endl;
      return 0;
}
 
intCocktailSort(int *nums, int start, int end)
{
      int i, isswap, temp;
      isswap = 1;
      while(isswap) {
            isswap = 0;
            for(i = start; i < end-1; i++) {
                     if(nums[i] > nums[i+1]) {
                            isswap = 1;
                            temp = nums[i];
                            nums[i] = nums[i+1];
                            nums[i+1] = temp;
                     }
            } //從前向後排序
            if(!isswap) { //表明從前向後排序沒有可交換的,已有序
                     break;
            }
            for(i = end-1; i > 0; i--) {
                     if(nums[i] < nums[i-1]) {
                            temp = nums[i];
                            nums[i] = nums[i-1];
                            nums[i-1]= temp;
                            isswap = 1;
                     }
            } //從後向前排序
      }
      return 0;
}


雞尾酒排序的時間複雜度也是O(n^2),但是當待排序的數已經基本有序的時候,它的時間複雜度可以就近O(n)。因爲如果基本有序,

可能可以在一次從前向後或從後向前的排序後就有序了。

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