鸡尾酒排序的 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

相关文章