雞尾酒排序(雙端冒泡排序)
雞尾酒排序也叫定向冒泡排序,攪拌排序等,是冒泡排序的一種變形。雞尾酒排序是在兩端開始排序的,而冒泡排序時在一端進行的。
雞尾酒排序的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)。因爲如果基本有序,
可能可以在一次從前向後或從後向前的排序後就有序了。