zoukankan      html  css  js  c++  java
  • 数据结构与算法系列——排序(8.2)_鸡尾酒排序

    1. 工作原理(定义)

      核心思想:鸡尾酒排序是冒泡排序的一种改进和变型 ,又称“双向冒泡排序”,鸡尾酒排序是从低到高然后从高到低来回排序(选出最大和最小项),比冒泡排序的效率稍微好一点,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。 

    2. 算法步骤

    1. 先对数组从左到右进行冒泡排序(升序),则最大的元素去到最右端 
    2. 再对数组从右到左进行冒泡排序(降序),则最小的元素去到最左端 
    3. 循环1、2步操作,依次改变冒泡的方向,并不断缩小未排序元素的范围,直到最后一个元素结束

      

    4. 性能分析

      鸡尾酒排序是冒泡排序的一种改进,倒并未有本质的改变,与冒泡排序的时间复杂度和空间复杂度相近,整体的性能都比较差。

    1. 时间复杂度

      (1)顺序排列时,鸡尾酒排序时间复杂度为O(n); 
      (2)逆序排序时,鸡尾酒排序时间复杂度为O(n^2); 
      (3)当原始序列杂乱无序时,平均时间复杂度为O(n^2)。

    2. 空间复杂度

      鸡尾酒排序排序过程中,Swap函数需要一个临时变量temp进行两两交换,所需要的额外空间为1,因此空间复杂度为O(1)。

    3. 算法稳定性 

      鸡尾酒排序是一种稳定的排序算法。

    5. 具体代码

    public class CockTailSort{
        public static void main(String[] args) {
            int[] arr = {8,7,6,5,4,3,2,1};
            cockTailSort(arr);
        }
    
        public static void cockTailSort(int[] arr) {
            boolean isSorted=false;
            int length = arr.length;
            //双向同时进行
            for(int i=0;i<length/2;i++) {
                isSorted=false;
                //升序排列
                for(int j=i;j<length-i-1;j++) {
                    if(arr[j]>arr[j+1]) {
                        swap(arr, j, j + 1);
                        isSorted=true;
                    }
                }
                //降序排列
                for(int j=length-i-1;j>i;j--) {
                    if(arr[j] < arr[j-1]) {
                         swap(arr, j, j - 1);
                        isSorted=true;
                    }
                }
    
                if(isSorted==false) {
                    break;
                }
            }
        }
        //交换
        private static void swap(int[] arr, int a, int b) {
            int tmp = arr[a];
            arr[a] = arr[b];
            arr[b] = tmp;
        }
    }

    6. 参考网址

    1. 排序算法系列之鸡尾酒排序

  • 相关阅读:
    Java解惑之TreeSet是如何去重的
    Spring.profiles多环境配置最佳实践
    设计模式-单例模式的5种实现
    JAVA实现单双向链表的增、删、改、查
    RxJava/RxAndroid 使用实例实践
    数学模型与计算机科学的认知
    Mac下TensorFlow安装及环境搭建
    2017年Android百大框架排行榜
    python 多线程就这么简单
    python 内置模块之hashlib、hmac、uuid
  • 原文地址:https://www.cnblogs.com/haimishasha/p/10883796.html
Copyright © 2011-2022 走看看