zoukankan      html  css  js  c++  java
  • 鸡尾酒排序

        鸡尾酒排序又叫双向冒泡排序,是冒泡排序的一种变形。它与冒泡排序的不同处在于排序时是以双向在序列中进行排序。以数组为例

        数组中的数字本是无规律的排放,先找到最小的数字,把他放到第一位,然后找到最大的数字放到最后一位,然后再找到第二小的数

    放到第二位,再找到第二大的数字放到倒数第二位。以此类推,直到完成排序。

        在网上找了张图,能够更直观的展示鸡尾酒的排序过程,看图

           

        可以看到,每一趟排序中,既找到了最小的数,又找到了最大的数,分别放到首尾位置,鸡尾酒排序要比冒泡排序的效率好一点;但是,

    如果一组序列是乱序的话,那么鸡尾酒排序和冒泡排序的效率就都很差了。

        下面通过代码来具体展示一下鸡尾酒排序,上代码

     1 #include<iostream>
     2 using namespace std;
     3 
     4 void swap(int a[],int i,int j)
     5 {
     6     int t;
     7     t=a[i];
     8     a[i]=a[j];
     9     a[j]=t;
    10 }
    11 void  cocktailsort(int a[],int n)
    12 {
    13       int i,left=0,right=n-1;  
    14       while(left<right) //由于是在两头同时排序,所以当left和right撞到的时候,要结束
    15        {
    16             for(i=left;i<right;i++)  //寻找本次排序中最大的数
    17                  if(a[i]>a[i+1])   
    18                      swap(a,i,i+1);
    19             right--;    //此时最大的数已放在最高位了,right要向前移一位
    20             for(i=right;i>left;i--)   //寻找本次排序中最小的数
    21                  if(a[i-1]>a[i])   
    22                      swap(a,i-1,i);
    23             left++;    //此时最小的数已放在最低位了,left要向后移一位
    24       }
    25 }
    26 int main()
    27 {
    28     int a[10]={34,4,78,35,8,64,45,18,26,35};
    29     int b[10]={13,7,24,8,18,7,26,5,10,28};
    30     cocktailsort(a,10);
    31     cocktailsort(b,10);
    32     cout<<"对数组a排序后为:
    ";
    33     for(int i=0;i<10;i++)
    34         cout<<a[i]<<" ";
    35     cout<<"
    对数组b排序后为:
    ";
    36     for(int i=0;i<10;i++)
    37         cout<<b[i]<<" ";
    38     return 0;
    39 }

    测试结果如下:

    2020-04-30    15:54:09

  • 相关阅读:
    #Responsive# 响应式图片//www.w3cplus.com/blog/tags/509.html 整个系列完结。
    用js实现帧动画
    js判断对象是否存在
    canvas
    函数的四种调用模式
    递归真的好难啊!!! 看完之后好多了
    词法作用域
    变量名提升
    ajax调用后台Java
    左图又文字自适应
  • 原文地址:https://www.cnblogs.com/buanxu/p/12809229.html
Copyright © 2011-2022 走看看