每周一算法之二——鸡尾酒排序
2011-12-11 23:10 贼寇在何方 阅读(397) 评论(0) 收藏 举报今儿兴致好,再上一个排序。
鸡尾酒排序,又称定向冒泡排序。冒泡排序的每一次冒泡都是从前往后,而鸡尾酒排序是从前往后与从后往前交替进行的。鸡尾酒排序效率稍好与冒泡排序。
时间复杂O(n2),与冒泡排序一样,适用于基本有序的序列。
上代码:
// 鸡尾酒排序算法,又称定向冒泡排序
// C++实现
#include <iostream>
using namespace std;
template<class T>
void cocktail_sort(T array[], int size)
{
int i;
int buttom = 0;
int top = size - 1;
T temp;
bool swapped = true; // 标记是否发生交换
while( true )
{
swapped = false;
// 正向冒泡
for( i=0; i<top; i++ )
{
if( array[i] > array[i+1] )
{
temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
swapped = true;
}
}
if( !swapped )
break;
top--;
// 反向冒泡
for( ; i>buttom; i-- )
{
if( array[i] < array[i-1] )
{
temp = array[i];
array[i] = array[i-1];
array[i-1] = temp;
swapped = true;
}
}
if( !swapped )
break;
buttom++;
}
}
int main(void)
{
int array[] = {2, 5, 3, 1, 6, 4, 7};
cocktail_sort(array, sizeof(array) / sizeof(int));
for (int i = 0; i < sizeof(array) / sizeof(int); i ++)
cout<<array[i];
return 0;
}
浙公网安备 33010602011771号