鸡尾酒排序,也就是定向冒泡排序鸡尾酒搅拌排序搅拌排序(也可以视作选择排序的一种变形),涟漪排序来回排序or 快乐小时排序,是冒泡排序的一种变形。此算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。

理解

还是以a=[12,25,5,13,21,37]为例 第1轮:
1.[12,25,5,13,21,37]--a[0]=12与a[1]=25比较-->[12,25,5,13,21,37]
2.[12,25,5,13,21,37]--a[1]=25与 a[2]= 5比较-->[12,5,25,13,21,37]
3.[12,5,25,13,21,37]--a[2]=25与a[3]=13比较-->[12,5,13,25,21,37]
4.[12,5,13,25,21,37]--a[3]=25与a[4]=21比较-->[12,5,13,21,25,37]
5.[12,5,13,21,25,37]--a[4]=25与a[5]=37比较-->[12,5,13,21,25,37]
6.[12,5,13,21,25,37]--a[4]=25与a[3]=21比较-->[12,5,13,21,25,37]
7.[12,5,13,21,25,37]--a[3]=21与a[2]=13比较-->[12,5,13,21,25,37]
8.[12,5,13,21,25,37]--a[2]=13与 a[1]= 5比较-->[12,5,13,21,25,37]
9.[12,5,13,21,25,37]-- a[1]= 5与a[0]=12比较-->[5,12,13,21,25,37]
第1轮即排序完成,可设置标志位,若某1轮来回没有一次交换,即排序结束。

Python代码

def cocktail_sort(array):length=len(array)for i in range(length//2): #每一轮来回,只需冒泡排序的一半#每一轮后,都会除去开头和结尾两个元素,最小最大在开头和结尾for j in range(i,length-1-i): #从开头到结尾if array[j]>array[j+1]: array[j],array[j+1]=array[j+1],array[j]for k in range(length-2-i,i,-1): #从倒数第二个数到开头第二个数if array[k]<array[k-1]:array[k],array[k-1]=array[k-1],array[k]return arrayif __name__ == '__main__':array=[12,25,5,13,21,37]print(cocktail_sort(array))结果
[5, 12, 13, 21, 25, 37]

加上打印函数,看看比较过程

def cocktail_sort(array):length=len(array)for i in range(length//2):for j in range(i,length-1-i):if array[j]>array[j+1]:print("a[%s] a[%s]比较" %(j,j+1),end=' ')print('第%s轮 第%s次' %(i+1,j+1),end=':')print(array,end='--->')array[j],array[j+1]=array[j+1],array[j]print(array)else:print("a[%s] a[%s]比较" %(j,j+1),end=' ')print('第%s轮 第%s次' %(i+1,j+1),end=':')print(array,end='--->')print(array)for k in range(length-2-i,i,-1):if array[k]<array[k-1]:print("a[%s] a[%s]比较" %(k,k-1),end=' ')print('第%s轮 第n次' %(i+1),end=':')print(array,end='--->')array[k],array[k-1]=array[k-1],array[k]print(array)else:print("a[%s] a[%s]比较" %(k,k-1),end=' ')print('第%s轮 第n次' %(i+1),end=':')print(array,end='--->')print(array)return arrayif __name__ == '__main__':array=[12,25,5,13,21,37]print(array)print(cocktail_sort(array))[12, 25, 5, 13, 21, 37]
a[0] a[1]比较 第1轮 第1次:[12, 25, 5, 13, 21, 37]--->[12, 25, 5, 13, 21, 37]
a[1] a[2]比较 第1轮 第2次:[12, 25, 5, 13, 21, 37]--->[12, 5, 25, 13, 21, 37]
a[2] a[3]比较 第1轮 第3次:[12, 5, 25, 13, 21, 37]--->[12, 5, 13, 25, 21, 37]
a[3] a[4]比较 第1轮 第4次:[12, 5, 13, 25, 21, 37]--->[12, 5, 13, 21, 25, 37]
a[4] a[5]比较 第1轮 第5次:[12, 5, 13, 21, 25, 37]--->[12, 5, 13, 21, 25, 37]
a[4] a[3]比较 第1轮 第n次:[12, 5, 13, 21, 25, 37]--->[12, 5, 13, 21, 25, 37]
a[3] a[2]比较 第1轮 第n次:[12, 5, 13, 21, 25, 37]--->[12, 5, 13, 21, 25, 37]
a[2] a[1]比较 第1轮 第n次:[12, 5, 13, 21, 25, 37]--->[12, 5, 13, 21, 25, 37]
a[1] a[0]比较 第1轮 第n次:[12, 5, 13, 21, 25, 37]--->[5, 12, 13, 21, 25, 37]
a[1] a[2]比较 第2轮 第2次:[5, 12, 13, 21, 25, 37]--->[5, 12, 13, 21, 25, 37]
a[2] a[3]比较 第2轮 第3次:[5, 12, 13, 21, 25, 37]--->[5, 12, 13, 21, 25, 37]
a[3] a[4]比较 第2轮 第4次:[5, 12, 13, 21, 25, 37]--->[5, 12, 13, 21, 25, 37]
a[3] a[2]比较 第2轮 第n次:[5, 12, 13, 21, 25, 37]--->[5, 12, 13, 21, 25, 37]
a[2] a[1]比较 第2轮 第n次:[5, 12, 13, 21, 25, 37]--->[5, 12, 13, 21, 25, 37]
a[2] a[3]比较 第3轮 第3次:[5, 12, 13, 21, 25, 37]--->[5, 12, 13, 21, 25, 37]
[5, 12, 13, 21, 25, 37]

转载于:https://www.cnblogs.com/moon-future/p/5833158.html

鸡尾酒排序Cocktail Sort相关推荐

  1. C语言鸡尾酒排序cocktail sort算法(附完整源码)

    鸡尾酒排序cocktail sort算法 鸡尾酒排序cocktail sort算法的完整源码(定义,实现,main函数测试) 鸡尾酒排序cocktail sort算法的完整源码(定义,实现,main函 ...

  2. 经典排序算法 - 鸡尾酒排序Cocktail sort

    经典排序算法 - 鸡尾酒排序Cocktail sort 鸡尾酒排序基于冒泡排序,双向循环 还是看例子吧,给定待排数组[2 3 4 5 1] 第一趟过去时的每一步 第一步迭代,2 < 3不换 [2 ...

  3. 鸡尾酒排序(Cocktail sort)

    package com.ww.algorithm.sort.exchange;import org.junit.Test;import java.util.Arrays;/*** 鸡尾酒排序:冒泡排序 ...

  4. 鸡尾酒排序Cocktail Sort(排序算法九)

    1.算法原理 2.代码实现 #include <stdio.h>//printArray打印出数组 void printArray(int a[],int size){ printf(&q ...

  5. 鸡尾酒排序算法c语言,[golang] 数据结构-鸡尾酒排序

    吐个槽 又是一个不正经取名的排序算法.真要说和鸡尾酒间的关系,大概就是想喝到鸡尾酒(得到排序好的队列)就要摇晃酒杯让不同的成分混合均匀(向两个方向冒泡排序) 原理 鸡尾酒排序(Cocktail Sor ...

  6. 鸡尾酒排序算法c语言源代码,排序算法之鸡尾酒排序

    5.3 鸡尾酒排序(Cocktail sort) 既然介绍了冒泡排序.就不得不说一下冒泡排序最为重要的一个变种--鸡尾酒排序(也称为定向冒泡排序).此算法与冒泡排序的不同之处在于鸡尾酒排序是双向进行的 ...

  7. [排序]鸡尾酒排序算法实现

    作者 zhonglihao 算法名 鸡尾酒排序 Cocktail Sort 分类 排序 复杂度 % 大概是1/2 * n^2时间复杂度 形式与数据结构 Matlab代码 特性 来回顺序倒序排序 具体参 ...

  8. 鸡尾酒排序(Cocktail ordering)

    鸡尾酒排序,也叫定向冒泡排序,是冒泡排序的一种改进.此算法与冒泡排序的不同之处在于从低到高排然后从高到低,而冒泡排序则仅从低到高去比较序列中的每个元素,可以得到比冒泡排序稍微好一点的效能. 最差时间复 ...

  9. 经典算法——鸡尾酒排序(冒泡算法改良)

    经典算法--鸡尾酒排序(冒泡算法改良) 文章分类:Java编程 搞开发的人都需要积累一些经典算法,以备不时之须.         搞开发也有好几年了,积累的一些算法一直没做过整理,这段时间无聊就把这些 ...

最新文章

  1. java枚举体_Java枚举体
  2. c语言if判断正确却不进函数,C语言初学者,为什么满足if条件却不进入,求大老解惑...
  3. Http 状态码一览表
  4. python代码需要背吗-纠结应该先学Python还是Java?看完就有数了
  5. 【数据挖掘】聚类算法 简介 ( 基于划分的聚类方法 | 基于层次的聚类方法 | 基于密度的聚类方法 | 基于方格的聚类方法 | 基于模型的聚类方法 )
  6. pb9调用http发短信post_远程服务调用
  7. SpringBoot用JdbcTemplates访问Mysql
  8. 机器学习(三十一)——Linear Discriminant Analysis
  9. VueJS 开发常见问题集锦
  10. 数字图像处理——中值滤波及其改进算法
  11. 【计算机网络】TCP IP通信处理过程
  12. Jackson,Gson,Fastjson比较
  13. 监控流媒体服务器连接监控摄像头的配置方式 - GB28181和ONVIF
  14. iOS 获取通讯录权限和权限提示弹框
  15. 软件项目管理第四章笔记---项目时间管理
  16. 金山、百度、360上演“三国杀” 巨头争推网盘
  17. PHP经典实用案例1000个
  18. VM安装MAC虚拟机
  19. 一个人的“野蛮”战争——周鸿祎奋斗记
  20. 苹果换原装电池_手机资讯:iPhone 电池最大容量低于 80%换电池选原装还是第三方...

热门文章

  1. idft重建图像 matlab_你赞成在医疗图像处理领域使用超分辨率重建技术吗?
  2. Helm 3 完整教程(十二):Helm 函数讲解(6)字典函数
  3. layui修改窗口标题
  4. 静态网站与动态网站的区别 静态网站生成工具
  5. 【UOJ78】二分图最大匹配
  6. cdr多页面排版_比AI更好用的文字排版软件推荐!
  7. nodemcu引脚_一、ESP32开发板NodeMCU-32S简介
  8. extjs中滚动条属性_前端学习随笔6 盒模型及相关属性
  9. mysql for centos_CentOs中mysql的安装与配置
  10. 高效点的全排列算法---堆算法(跟堆排序没关系)