• 【每日算法】交换排序算法之鸡尾酒排序/双向冒泡排序


    1)算法简介

    鸡尾酒排序等于是冒泡排序的轻微变形。不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。

    2)算法描述和分析

    1、依次比较相邻的两个数,将小数放在前面,大数放在后面;
    2、第一趟可得到:将最大数放到最后一位。
    3、第二趟可得到:将第二大的数放到倒数第二位。
    4、如此下去,重复以上过程,直至最终完成排序。
    鸡尾酒排序最糟或是平均所花费的次数都是O(n^2),但如果序列在一开始已经大部分排序过的话,会接近O(n)。

    最差时间复杂度: O(n^2)
    最优时间复杂度: O(n)
    平均时间复杂度: O(n^2)

    3)算法图解、flash演示、视频演示

    图解:

    鸡尾酒排序

    Flash:
    参见http://zh.wikipedia.org/zh-cn/%E9%B8%A1%E5%B0%BE%E9%85%92%E6%8E%92%E5%BA%8F右侧flash动画

    4)算法代码

    void CocktailSort(int *a,int nsize)  
    {  
        int tail=nsize-1;  
        for (int i=0;i<tail;)  
        {  
            for (int j=tail;j>i;--j) //第一轮,先将最小的数据排到前面  
            {  
                if (a[j]<a[j-1])  
                {  
                    int temp=a[j];  
                    a[j]=a[j-1];  
                    a[j-1]=temp;  
                }  
            }  
            ++i;    //原来i处数据已排好序,加1  
            for (j=i;j<tail;++j)    //第二轮,将最大的数据排到后面  
            {  
                if (a[j]>a[j+1])  
                {  
                    int temp=a[j];  
                    a[j]=a[j+1];  
                    a[j+1]=temp;  
                }      
            }  
            tail--;      //原tail处数据也已排好序,将其减1  
        }  
    }  
    
    

    5)考察点,重点和频度分析

    鸡尾酒排序在博主印象中出现的频度也不高,用到它的算法题大题很少,选择填空出现的话多以双向冒泡排序的名称出现,注意注意时间空间复杂度,理解理解算法应该问题就不大了。

    6)笔试面试例题

    考点基本类似冒泡排序,请参考上一节

  • 相关阅读:
    MVC CONTROLS TOOLKIT
    activemq Example
    OWASP
    ActiveMQ持久化消息的三种方式
    sqlyog
    dotnet压缩
    asp.net ajax 环境 c#与js互调
    asp.net 初步入门使用正则抓取网页信息
    用ASP.NET with C# 绘制曲线图(Curve图)转
    asp.net 中使用excel组件权限设置
  • 原文地址:https://www.cnblogs.com/shih/p/6660064.html
Copyright © 2020-2023  润新知