每周一算法之二——鸡尾酒排序
2011-12-11 23:10 贼寇在何方 阅读(387) 评论(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; }