鸡尾酒排序算法详解

一、什么是鸡尾酒排序

1.概念

鸡尾酒排序算法又叫快乐小时排序,它基于冒泡排序算法做了一些优化。冒泡排序算法每一轮都是从左到右进行元素比较,进行单向的位置交换,鸡尾酒排序算法则是双向的元素比较和交换。

2.算法原理

这是一个无序数列:2、3、4、5、6、7、8、1,我们要将它按从小到大排序。按照冒泡排序算法的思想,每一轮将最大的元素移到最右边。
在这里插入图片描述
第一轮结果
在这里插入图片描述
第二轮结果
在这里插入图片描述
第三轮结果
在这里插入图片描述
第四轮结果
在这里插入图片描述
第五轮结果
在这里插入图片描述
第六轮结果
在这里插入图片描述
第七轮结果
在这里插入图片描述
可以看到该序列2到8已经是有序的,但还需进行7轮排序,而鸡尾酒算法可以很好地解决这一问题

鸡尾酒排序算法第一轮与冒泡排序一致,从左到右进行比较、交换
在这里插入图片描述
第二轮,则从右向左进行比较、交换

8已经是有序了,7和1比较,7大于1,7和1交换
在这里插入图片描述
接下来,6和1比较,6大于1,6和1交换
在这里插入图片描述
以此类推,第二轮交换结果如下所示
在这里插入图片描述
第三轮,从左到右进行比较,2和3比较,位置不变,3和4比较,位置不变,4和5比较,位置不变,5和6比较,位置不变,6和7比较,位置不变

第三轮,没有发生任何元素交换,说明序列已是有序的,排序结束。

3.算法实现

// 鸡尾酒排序算法
function sort(arr) {let length = arr.length;// 记录右侧最后一次交换位置let lastRightExchangeIndex = 0;// 记录左侧最后一次交换位置let lastLeftExchangeIndex = 0;// 无序数列的右边界,每次比较只需要比到这里为止let rightSortBorder = length - 1;// 无序数列的左边界,每次比较只需要比到这里为止let leftSortBorder = 0;for (let i = 0; i < length / 2; i++) {let isSorted = true;for (let j = i; j < rightSortBorder; j++) {if (arr[j] > arr[j + 1]) {[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];isSorted = false;lastRightExchangeIndex = j;}}rightSortBorder = lastRightExchangeIndex;if (isSorted) {break;}for (let j = length - i - 1; j > leftSortBorder; j--) {if (arr[j - 1] > arr[j]) {[arr[j], arr[j - 1]] = [arr[j - 1], arr[j]];isSorted = false;lastLeftExchangeIndex = j;}}leftSortBorder = lastLeftExchangeIndex;if (isSorted) {break;}}
}let arr = [2, 3, 4, 5, 6, 7, 8, 1];
sort(arr);
console.log(arr);

鸡尾酒排序算法与冒泡排序算法一样,可以通过记录序列是否已经有序和最后一次交换顺序进行优化,代码中是已优化后的算法,具体优化原理可以参考十大经典排序算法-冒泡排序算法详解

二、鸡尾酒排序算法特点

1.复杂度和稳定性

鸡尾酒排序算法是对冒泡排序算法的优化,它的复杂度和稳定性和冒泡排序算法是一致的,时间复杂度为O(N^2),空间复杂度为O(1),是稳定排序算法。

2.优点

在特定条件下,通常指大部分元素都有序的场景下,可以减少排序的轮数。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【1072】鸡尾酒疗法

1072&#xff1a;鸡尾酒疗法 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 62913 通过数: 27350 【题目描述】 鸡尾酒疗法&#xff0c;指“高效抗逆转录病毒治疗”。人们在鸡尾酒疗法的基础上又提出了很多种改进的疗法。为了验证这些治疗方法是否在疗效上比鸡尾…

把psd自动生成html,根据psd文件生成html

我是新手&#xff0c;怎样在ps中把psd文件变成html文件呢&#xff1f;我知道要用切片&#xff0c;但是具体步骤怎么做&#xff0c;还有是不是不同的ps版本有差异 不同的ps版本是没有什么差异的&#xff0c;主要用到的就是工具里面的切片&#xff0c;用切片切好图后&#xff0c;…

为什么不要相信AI机器人提供的健康信息?

自从OpenAI、微软和谷歌推出了AI聊天机器人&#xff0c;许多人开始尝试一种新的互联网搜索方式&#xff1a;与一个模型进行对话&#xff0c;而它从整个网络上学到的知识。 专家表示&#xff0c;鉴于之前我们倾向于通过搜索引擎查询健康问题&#xff0c;我们也不可避免地会向Ch…

OpenAI 用于辅助治疗的 GPT-4:AI 如何彻底改变心理健康护理

人工智能&#xff08;AI&#xff09;改变了我们生活的方方面面&#xff0c;从娱乐和教育到医疗保健。人工智能最有前途的应用之一是在心理健康领域&#xff0c;它可以帮助数百万患有抑郁症、焦虑症、创伤后应激障碍 &#xff08;PTSD&#xff09; 和物质使用障碍等各种疾病的人…

大模型惨遭人类大范围攻击!国内各领域专家组团投毒,GPT-4也Hold不住

包括GPT-4在内等多个大模型惨遭人类攻击&#xff01;还是大范围、多边形那种。 而且这个军团被爆个个来头不小。 包括社会学家李银河、心理学家李松蔚、中科院计算研究所王元卓等&#xff0c;覆盖环境、心理、法理、心理、教育、大数据、无障碍等多个领域。 他们专挑刁钻、陷…

苹果AI哪去了?前员工揭秘Siri何以走向没落:团队内耗、技术判断太谨慎

明敏 发自 凹非寺量子位 | 公众号 QbitAI 苹果为何会在最新一轮ChatGPT趋势中“静悄悄”&#xff1f; 答案更进一步浮出水面。 内部团队混乱、决策缓慢、代码笨重&#xff0c;都成为了拖累苹果AI更快前进的原因。 最直接的体现&#xff0c;可以来看Siri。 这大概是大部分普通人…

新规拉开中国生成式AI“百团大战”序幕?

AI将走向何方&#xff1f; ChatGPT在全球范围掀起的AI热潮正在引发越来越多的讨论&#xff0c;AI该如何管理&#xff1f;AI该如何发展&#xff1f;一系列问题都成为人们热议的焦点。此前&#xff0c;马斯克等海外名人就在网络上呼吁OpenAI暂停ChatGPT的模型训练和迭代&#xf…

苹果AI哪去了?前员工揭秘Siri何以走向没落:团队内耗、技术判断太谨慎!

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年3月份热门报告合集 万字干货&#xff1a;ChatGPT的工作原理 2023年创业&#xff08;有创业想法&#xff09;必读手册 ChatGPT等让你效率倍增的22个AI工具 ChatGPT调研…

Mac下安装Redis 4.0(服务器端)

系统环境: CentOS 7.4 Redis版本: 4.0 这里采用终端下载解析安装: 1.1 进入/usr/local/目录 cd /usr/local/ 1.2 下载稳定版 wget http://download.redis.io/releases/redis-4.0.10.tar.gz 1.3 解压: tar -zxvf redis-4.0.10.tar.gz 1.4 进入解压后的文件中 cd redis-4.0.10 1.…

Mac下 Gradle4.0 详细安装攻略

macaca更新到2.0.0以上&#xff0c; 安卓需要使用gradle来构建app包&#xff0c;具体见Macaca 基于Python自动化测试框架搭建详解 ——Android、IOS搭建步骤&#xff0c;所以有了以下这篇文章。安装具体步骤如下&#xff1a; 
 • 下载最新的gradle的包&#xff0c;地址为&a…

mdserver(mac版) 4.0.1.0

mdserver(mac版) 4.0.1.0 Mac上高度可定制的PHP开发环境,集成必要的扩展,方便使用。 (pkg安装方式),安装方便,是你Mac上的PHP开发利器。 支持80端口。OpenResty(1.15.8.3)支持Lua开发。Redis(6.2.5),MongoDB(5.0.0),Memcached(1.6.10)。php-fpm以sock文件方式管理。多php进程…

Portraiture4.0最新免费磨皮美白滤镜修图插件

Portraiture这款老牌的一键磨皮修图插件终于更新啦&#xff01;最近官方推出了Portraiture 4.0.3版本&#xff01;新版本光影处理更强大&#xff0c;支持PS和LR软件&#xff01;&#xff01;最新版Portraiture 4.0.3插件滤镜下载安装包一PS人像精修磨皮美化修图神器&#xff0c…

pytorch gpu版本安装

正确的安装顺序 完蛋的&#xff0c;我写到现在才发现&#xff0c;由于我对于要安装的东西一知半解&#xff0c;导致我开始就被误导了&#xff0c;我首先查看了自己的cuda版本号&#xff0c;然后去安装pytorch&#xff0c;后来发现官网上pytorch都到11.6了&#xff0c;我才只有1…

【代码随想录day15】110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和

110.平衡二叉树 问题 题目链接&#xff1a;https://leetcode.cn/problems/balanced-binary-tree/ 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值…

SpringBoot自动装配串讲

目录 前言一. 基础概念1-1. Spring1-2. SpringBoot 二. 自动装配概览2-1. 效果&#xff08;目的&#xff09;2-2. 猜想2-3. SpringBoot的实现方案2-4. 对比及分析2-4-1. starter里为什么没有pom文件2-4-2. 配置类为什么没写在starter里 三. 自动装配细节3-1. 流程图3-2. 各部分…

告别抠图!海量免抠PNG,任你选

无论处理图片还是做PPT&#xff0c;经常会用到透明背景的图片素材&#xff0c;往往这种时候就需要进行抠图加 工。对PS图技术不佳的小伙伴而言&#xff0c;要抠出一张完美的图片并非易事。但也不是难事&#xff0c;只要你 有免抠PNG素材网&#xff08;搜图114 www.sotu114.co…

自己用ps抠图标

大家进入项目阶段已经有差不多一个月了&#xff1b;从简单数据库分析到慢慢的调试页面&#xff1b;再到 灵活的进行增删查改&#xff1b;相信在这一个月里大家的代码技术都有了一定的提高&#xff1b;相信对于以前学的现在是更加熟练了。对于不会的&#xff0c;可以通过网上查找…

不会PS怎么抠图换背景?赶紧收藏这3个好用的一键抠图神器

在现代社交媒体的世界里&#xff0c;给一张图片抠图换背景已经成为了互联网上很普遍的需求&#xff0c;比如有些朋友可能需要在社交媒体上分享自己的照片或制作一些创意性的设计作品&#xff0c;抠图换背景就可以帮助把图片创造出更好的视觉效果。一提到抠图去除背景&#xff0…

抠图软件哪个好用?这些软件你了解吗?

我们在抠取图片中的元素时&#xff0c;偶尔需要将图片中的人物抠出来。比如通过抠人像的方式&#xff0c;给证件照更换背景&#xff1b;或者制作搞怪照片&#xff0c;玩法多样。不过我们需要选择一款适合自己的人像抠图软件&#xff0c;所以人像抠图软件哪个好&#xff1f;快往…

GIMP:利用蒙板工具实现人像抠图

GIMP&#xff1a;利用蒙板工具实现人像抠图 利用蒙板工具进行抠图简单介绍方法步骤1.打开图像2.复制图层3.选中图层4.将图层改为单色5.人像与背景分离6.反相显示7.人像部分描白8.添加图层蒙板9.粘贴白色人像轮廓10.图层不可视11.解决人像范围不正确12.随意更换图像背景 利用蒙板…