• 鸡尾酒排序


    所谓鸡尾酒的排序就是元素比较和交换过程是双向的,而冒泡排序是单项的,

    下面先举个例子来一步一步介绍其排序思想。

    例如给定数组元素为2,3,4,5,6,7,8,1

    我们按照冒泡排序的思想,排序过程如下:

    从上面的过程我们可以看出,2-8已经有序,只有1无序,而我们却要比较七次,才能排序成功。这样,我们就可以引出我们的鸡尾酒排序算法,也叫快乐小时排序。

    下面我们给出鸡尾酒排序过程:

    这就是鸡尾酒排序过程,像摆钟一样,第一轮从左向右,第二轮从右向左,第三轮从左向右...

    相比较冒泡排序优化了比较次数,下面是鸡尾酒排序代码:

    public static void Sort(int[] arr) {
            int tmp = 0;
            //记录右侧最后一次交换的位置
            int lastRightExchangeIndex = 0;
            //记录左侧最后一次交换的位置
            int lastLeftExchangeIndex = 0;
            //无序数列的左边界
            int rightBoard = arr.length - 1;
            //无序数列的右边界
            int leftBoard = 0;
            for(int i = 0;i<arr.length/2;i++) {
                //有序标记
                boolean b = true;
                //奇数轮从左向右
                for(int j = leftBoard;j<rightBoard;j++) {
                    if(arr[j]>arr[j+1]) {
                        tmp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = tmp;
                        b = false;
                        lastRightExchangeIndex = j;
                    }
                }
                rightBoard = lastRightExchangeIndex;
                //偶数轮前重新标记true
                if(b) break;
                //偶数轮从右向左
                b = true;
                for(int j = rightBoard;j>leftBoard;j--) {
                    if(arr[j]<arr[j-1]) {
                        tmp = arr[j];
                        arr[j] = arr[j-1];
                        arr[j-1] = tmp;
                        b = false;
                        lastLeftExchangeIndex = j;
                    }
                }
                leftBoard = lastLeftExchangeIndex;
                if(b) break;
            }
            System.out.println(Arrays.toString(arr));
        }

    那么为什么要引入鸡尾酒排序算法?那是因为在特定的条件下,可以减少排序回合数,这也是鸡尾酒排序算法的一大优点吧

    有优点也有缺点,那么它的缺点是:和前面介绍的冒泡排序算法比较,显而易见,代码多。

  • 相关阅读:
    matlab中绘制折线图、绘制条形图(柱形图)的简单方法
    2.序列类型方法
    年度KPI绩效面谈记录
    软件开发工作杂谈——更杂版
    软件研发工作杂谈
    FFI Navigtor在Windows环境下的"No Such File or Directory"Bug解决过程
    Linux环境部署帆软报表(FineReport)说明
    IIS负载均衡Application Request Route 安装配置说明(ARR)
    python使用了resetKeyboard输入法打不开怎么办
    python 执行时报错AttributeError: 'dict' object has no attribute 'has_key'
  • 原文地址:https://www.cnblogs.com/du001011/p/10436697.html
Copyright © 2020-2023  润新知