数据结构---鸡尾酒排序

news2024/11/18 22:38:34

鸡尾酒排序


是基于冒泡排序的一种升级排序法( 双向冒泡排序
冒泡排序:每一轮都是从左到右来比较元素,进行 单向的位置交换的。
鸡尾酒排序的元素比较和交换过程是 双向的。

解决的问题如下:从小到大排序{2,3,4,5,6,7,8,1}
如果用冒泡排序
在这里插入图片描述
存在的问:只有元素1的位置不对,却还要进行7轮排序

解决方案:鸡尾酒排序
第1轮从左到右,第2轮从右到左,第3轮再从左到右……
在鸡尾酒排序的第3轮,需要重新从左向右比较并进行交换。1和2比较,位置不变;2和3比较,位置不变;3和4比较,位置不变……6和7比较,位置不变。没有元素位置进行交换,证明已经有序,排序结束

注意:代码中外层循环次数是:array.length/2
原因:代码外层的大循环控制着所有排序回合,大循环内包含2个小循环,第1个小循环从左向右比较并交换元素,第2个小循环从右向左比较并交换元素。
所以,一个大循环就把头尾俩个元素都排序好了,外层循环次数就得减半

package mysort.bubbleSort;

import java.util.Arrays;

public class cocktailSort {

   public static void sort(int array[]){
       int tmp = 0;
       for (int i = 0;i<array.length/2;i++){
           //有序标记,每一轮的初始值都是true
           boolean isSorted = true;

           //************奇数轮,从左向右比较和交换**********
            for (int j=i; j<array.length-1-i; j++){
                //大元素后移
                if(array[j]>array[j+1]){
                    tmp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = tmp;
                    // 有元素交换,所以不是有序的,标记变为false
                    isSorted = false;
                }
            }
            if(isSorted){
                break;
            }

           // 在偶数轮之前,将isSorted重新标记为true
           isSorted = true;
           //****************偶数轮,从右向左比较和交换**************
            for (int j=array.length-1-i; j>i;j--){
                //大元素后移动
                if(array[j]<array[j-1]){
                    tmp = array[j];
                    array[j] = array[j-1];
                    array[j-1] = tmp;
                    isSorted = false;
                }
            }
            if(isSorted){
                break;
            }
       }
   }

    public static void main(String[] args) {
        int []array = new int[]{2,3,4,5,6,7,8,1};
        sort(array);
        System.out.println(Arrays.toString(array));
    }
}

通过 if(isSorted){ break; }
来提前跳出循环

奇数轮:将最大的元素逐一放到右边
偶数轮:将最小的元素逐一放到左边

优势:鸡尾酒排序的优点是能够在特定条件下,减少排序的回合数;
(就如上例子,排序三轮就行了)

使用场景:至于它能发挥出优势的场景,是大部分元素已经有序的情况

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95947.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务框架 SpringCloud微服务架构 多级缓存 48 多级缓存 48.9 Nginx 本地缓存

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存48 多级缓存48.9 Nginx 本地缓存48.9.1 Nginx本地缓存需求48.9.2 Nginx 本地缓存48 多级缓存 48.9 Ng…

LCHub:伙伴云荣获21世纪商业模式高峰论坛 低代码平台明星企业

12月13日,由南方财经全媒体集团指导,《21世纪商业评论》、《21世纪经济报道》联合主办的“21 世纪商业模式高峰论坛(2022)”在上海绿地万豪酒店举行。 大会公布了21 世纪商业模式竞争力研究榜单,伙伴云凭借在低/无代码领域的技术创新,领先的商业模式和多维度专业服务能力,…

java设计模式之建造者模式(Builder Pattern)

目的&#xff1a;将产品与产品的创建过程解耦 。他是按照相应的步骤来构建产品 下面看一下UML序列图 对于序列图的一个解释 下面来上一个标准代码 Product.java package com.pxx;public class Product {private String shape;private int height;private String color;publ…

OAuth2四种授权模式

授权码模式 授权码模式&#xff08;Authorization Code&#xff09; 是功能最完整、流程最严密、最安全并且使用最广泛的一种OAuth2授权模式。同时也是最复杂的一种授权模式&#xff0c;它的特点就是通过客户端的后台服务器&#xff0c;与服务提供商的认证服务器进行互动。其具…

SpringMVC学习笔记 | SpringMVC从入门到源码分析

一、SpringMVC导学 二、SpringMVC简介 MVC M&#xff1a;模型 Model 指工程中的JavaBean 一类称为实体类Bean&#xff1a;专门存储业务数据的&#xff0c;如 Student、User 等一类称为业务处理 Bean&#xff1a;指 Service 或 Dao 对象&#xff0c;专门用于处理业务逻辑和数据访…

Java IO AIO学习+BIO聊天室+NIO详解

IO第一章 BIO、NIO、AIO课程介绍1.1 说明1.2 可以解决的问题第二章 Java I/O的演进2.1 I/O模型基本说明2.2 I/O模型BIONIOAIO2.3 适用场景第三章 Java BIO深入解剖3.1 Java BIO基本介绍3.2 传统的BIO编程实例3.3 单个客户端下的多发多收3.4 BIO 模式下接收多个客户端概述服务器…

【YOLOv7/v5系列算法改进NO.46】融合DLinkNet模型中协同双注意力机制CDAM2

文章目录前言一、解决问题二、基本原理三、改进办法前言 作为当前先进的深度学习目标检测算法YOLOv7&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系列文章&…

[附源码]Python计算机毕业设计-哈尔滨旅游项目推荐平台Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

[CCS12.1][CC2340] 环境搭建

环境搭建一、 CCS 安装二、打补丁包三、环境修改一、 CCS 安装 CCS12.0 安装并设置中文 CCS12.1.0.00007 下载 注&#xff1a;cc2340只能使用CCS12.1.0.00007以上版本。 其他准备&#xff1a; cc23xx_device_support_0.01.10.284_win64.zip FreeRTOSv202104.00.zip simplel…

WPF聚光灯光源学习

聚光灯&#xff0c;Spotlight&#xff1b;其照亮方式与 PointLight 类似&#xff0c;但是它既有位置又有方向&#xff1b; 它们在 InnerConeAngle 和 OuterConeAngle 属性所设置的锥形区域&#xff08;以度为单位指定&#xff09;中投射光&#xff1b; 此光源在一个圆锥形区域…

使用ChatGPT帮我们写一篇论文,最后查重的重复率会是多少?

使用ChatGPT帮我们写一篇论文&#xff0c;最后查重的重复率会是多少&#xff1f; ChatGpt一经发布就大火&#xff0c;迅速应用在各个领域&#xff0c;尤其在程序圈自动帮我们写代码着实是圈了一大波粉。那么它用在科研领域会出现怎样的效果呢&#xff0c;当我们写论文纠结几个…

实战整了一个后台服务,真香!

大家好&#xff0c;HTTP 服务是重中之重&#xff0c;今天分享一下 一个HTTP服务的实现。 项目介绍 本项目实现的是一个HTTP服务器&#xff0c;项目中将会通过基本的网络套接字读取客户端发来的HTTP请求并进行分析&#xff0c;最终构建HTTP响应并返回给客户端。 HTTP在网络应…

25.自定义层

深度学习成功背后的一个因素是神经网络的灵活性&#xff1a; 我们可以用创造性的方式组合不同的层&#xff0c;从而设计出适用于各种任务的架构。 例如&#xff0c;研究人员发明了专门用于处理图像、文本、序列数据和执行动态规划的层。 有时我们会遇到或要自己发明一个现在在深…

逸佳君:提升电脑使用效率的一些工具和方法论

大家好&#xff0c;我是逸佳君。今天给大家介绍一下我日常使用的可以提升电脑使用效率的工具软件。 先放个写作框架&#xff1a; 一、浏览器篇浏览器首推谷歌。 1、网页收藏夹 曾经&#xff0c;我的浏览器堆满了有用无用的书签&#xff0c;当想要去找某一个书签的时候&#…

这次不找借口了,找不到工作就好好学一下这份 16W 字 Java 面试合集

人生很长&#xff0c;生活不止眼前的苟且&#xff0c;远方也是 倒霉的时候总会想起福祸相依&#xff0c;但你会发现倒霉起来没完没了&#xff0c;就是看不到传说中的“福” 年初被裁了&#xff0c;我会安慰自己&#xff0c;此处不留爷自有留爷处&#xff0c;然后踏入找工作的行…

android studio App Inspection 实时查看SQLite数据库

几年以前查看安卓手机的数据库&#xff0c;是把数据库文件导出到电脑上&#xff0c;然后用数据库查看工具查看的&#xff1a; Android查看手机内部储存目录及数据库文件_Alex老夫子的博客-CSDN博客_android database目录 现在Android Studio 有了新的工具 App Inspection&…

慧都APS解决方案,点亮「照明灯具行业」精益化生产之路

导语&#xff1a; 照明灯具行业正面临着巨大的考验&#xff0c;除了本身的技术门槛、制程复杂外&#xff0c;还面对产业内高度的竞争、原材料价格不断上涨等困境&#xff0c;在内外因素双重夹击下&#xff0c;灯具产业通过数字化变革降低运营成本&#xff0c;提升盈利空间已是…

【k8s系列】vmware中ubuntu22.04使用kubeadm安装k8s集群(1.24.4 or higher)(cka考试环境搭建)

文章目录部署环境准备环境修改修改hostname(各修改各的)修改hosts文件(master 和所有node )禁用swap(master 和所有node)修改内核参数(master 和所有node )安装 containerd安装k8s安装组件(master 和所有node )下载镜像(master 和所有node )集群配置(master)集群配置2集群配置3…

C/C++程序的断点调试 - Dev C++

本文以Dev C 5.11为例&#xff0c;简述C/C程序断点调试的基本方法和过程。其它的IDE环境&#xff0c;大同小异。 本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载&#xff0c;但需要注明原作者"海洋饼干叔 叔"&#xff1b;本文不允许…

探花交友_第7章_即时通信(新版)

探花交友_第7章_即时通信 文章目录探花交友_第7章_即时通信1.1 什么是即时通信1.2 功能说明1.3 技术方案2. 环信2.1 开发简介2.2 环信Console2.3 环信API介绍初始化基础API3. 抽取环信组件3.1 编写Properties对象3.2 编写HuanXinTemplate3.3 编写自动配置类3.4 环信集成测试4. …