鸡尾酒排序的 C++ 程序?
server side programmingprogrammingc++
鸡尾酒排序是冒泡排序的另一种变体。在冒泡排序技术中,它总是从左到右搜索,并在末尾找到最大元素,在第二阶段,它在倒数第二个位置找到第二大元素。这种排序技术交替地在两个方向上遍历。让我们看一下算法以理解这个想法。
算法
cocktail(array, n)
开始 flag := true start := 0, end := n-1 while flag is set, do flag := false 对于范围从 start 到 end-1 内的 i,执行 如果 arr[i] > arr[i+1],则 交换 arr[i] 和 arr[i+1] flag := true end if done 如果未设置标志,则 break end if flag := false end := end – 1 for i in range end -1 down to start, do if arr[i] > arr[i+1], then 交换 arr[i] 和 arr[i+1] flag := true end if done start := start + 1 done End
示例
#include<iostream> using namespace std; voidcocktailSort(int arr[], int n){ bool flag = true; int start = 0, end = n-1; while(flag){ flag = false; for(int i = start; i<end; i++){ //按冒泡排序从左到右扫描 if(arr[i] > arr[i+1]){ swap(arr[i], arr[i+1]); flag = true; } } if(!flag){ //如果没有任何变化,则简单地中断循环 break; } flag = false; end--; //减少结束指针 for(int i = end - 1; i >= start; i--){ //从右向左扫描 if(arr[i] > arr[i+1]){ swap(arr[i], arr[i+1]); flag = true; } } start++; } } main() { int data[] = {54, 74, 98, 154, 98, 32, 20, 13, 35, 40}; int n = sizeof(data)/sizeof(data[0]); cout << "排序序列"; cocktailSort(data, n); for(int i = 0; i <n;i++){ cout << data[i] << &" &";; } }
输出
排序序列 13 20 32 35 40 54 74 98 98 154