美文网首页
动画 | 什么是鸡尾酒排序?

动画 | 什么是鸡尾酒排序?

作者: 我脱下短袖 | 来源:发表于2020-01-27 13:12 被阅读0次

鸡尾酒排序其实就是冒泡排序的变形,它的时间复杂度和冒泡排序一样,都是O(n^2),比快速排序要慢不少。

file

鸡尾酒排序的思想有点像摆钟一样,从左到右,又从右到左。而冒泡排序只是单向执行。

鸡尾酒排序也是交换排序,假设做一个升序排序,先从左到右,交换一趟把最大的数放置右边,然后从右到左,把最小的数放置左边。

视频动画

算法动画视频 地址

Code
file
Result

初始状态 [5, 1, 9, 3, 7, 4, 8, 6, 2]
从左到右发生交换 [1, 5, 9, 3, 7, 4, 8, 6, 2]
从左到右发生交换 [1, 5, 3, 9, 7, 4, 8, 6, 2]
从左到右发生交换 [1, 5, 3, 7, 9, 4, 8, 6, 2]
从左到右发生交换 [1, 5, 3, 7, 4, 9, 8, 6, 2]
从左到右发生交换 [1, 5, 3, 7, 4, 8, 9, 6, 2]
从左到右发生交换 [1, 5, 3, 7, 4, 8, 6, 9, 2]
从左到右发生交换 [1, 5, 3, 7, 4, 8, 6, 2, 9]
从右到左发生交换 [1, 5, 3, 7, 4, 8, 2, 6, 9]
从右到左发生交换 [1, 5, 3, 7, 4, 2, 8, 6, 9]
从右到左发生交换 [1, 5, 3, 7, 2, 4, 8, 6, 9]
从右到左发生交换 [1, 5, 3, 2, 7, 4, 8, 6, 9]
从右到左发生交换 [1, 5, 2, 3, 7, 4, 8, 6, 9]
从右到左发生交换 [1, 2, 5, 3, 7, 4, 8, 6, 9]
从左到右发生交换 [1, 2, 3, 5, 7, 4, 8, 6, 9]
从左到右发生交换 [1, 2, 3, 5, 4, 7, 8, 6, 9]
从左到右发生交换 [1, 2, 3, 5, 4, 7, 6, 8, 9]
从右到左发生交换 [1, 2, 3, 5, 4, 6, 7, 8, 9]
从右到左发生交换 [1, 2, 3, 4, 5, 6, 7, 8, 9]

优化 减少不必要的交换

看了前面冒泡排序和快速排序,我相信优化是一项学习的重点,以后面试中可以把这项说说来,展示出你的实力。

这次我们就优化不必要的交换次数,come on!

我么通过移除swap函数的调用,从而让程序运行的更快一点。每次进行符合条件判断时,不做交换,让最大或者最小的数据做一个标记,待全部比较完之后,才进行做交换。

视频动画

算法动画视频 地址

Code
file
Result

初始状态 [5, 1, 9, 3, 7, 4, 8, 6, 2]
从左到右发生交换 [5, 1, 2, 3, 7, 4, 8, 6, 9]
从右到左发生交换 [1, 5, 2, 3, 7, 4, 8, 6, 9]
从左到右发生交换 [1, 5, 2, 3, 7, 4, 6, 8, 9]
从右到左发生交换 [1, 2, 5, 3, 7, 4, 6, 8, 9]
从左到右发生交换 [1, 2, 5, 3, 6, 4, 7, 8, 9]
从右到左发生交换 [1, 2, 3, 5, 6, 4, 7, 8, 9]
从左到右发生交换 [1, 2, 3, 5, 4, 6, 7, 8, 9]
从右到左发生交换 [1, 2, 3, 4, 5, 6, 7, 8, 9]

长按下图二维码关注公众号,「算法无遗策」持续更新算法

file

相关文章

  • 动画 | 什么是鸡尾酒排序?

    鸡尾酒排序其实就是冒泡排序的变形,它的时间复杂度和冒泡排序一样,都是O(n^2),比快速排序要慢不少。 鸡尾酒排序...

  • 算法之美——鸡尾酒排序

    1.概念 鸡尾酒排序又称双向冒泡排序、鸡尾酒搅拌排序、搅拌排序、涟漪排序、来回排序或快乐小时排序, 是冒泡排序的一...

  • 排序算法(九)鸡尾酒排序

    排序算法(九)鸡尾酒排序   鸡尾酒排序(Cock-Tail-Sort)是基于冒泡排序做一点点优化而来的。冒泡排序...

  • 鸡尾酒排序

    鸡尾酒排序算法是一种定向的冒泡排序算法,由于其来回折腾,因此又叫鸡尾酒搅拌排序、来回排序或者是涟漪排序、快乐小时排...

  • 鸡尾酒排序Cocktail Sort

    鸡尾酒排序,也就是定向冒泡排序,鸡尾酒搅拌排序,搅拌排序(也可以视作选择排序的一种变形),涟漪排序,来回排序or ...

  • 鸡尾酒排序

    鸡尾酒排序 @(F1 - 算法学习)[排序|noteton] WIKI上的定义 鸡尾酒排序,也就是定向冒泡排序、鸡...

  • Java基础01 冒泡排序

    冒泡排序 Java中有很多种排序:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、...

  • 常用排序算法总结

    大写的转 目录 [冒泡排序][鸡尾酒排序] [选择排序] [插入排序][二分插入排序][希尔排序] [归并排序] ...

  • 动画 | 什么是计数排序?

    我们知道快速排序的时间复杂度期望值是O(nlogn),其中O(logn)是利用了二分法进行远距离比较和交换元素的位...

  • 动画 | 什么是希尔排序?

    希尔排序属性 上篇写的直接插入排序算法时间复杂度是O(n2),如果要令此排序算法的时间复杂度要低于O(n2),必须...

网友评论

      本文标题:动画 | 什么是鸡尾酒排序?

      本文链接:https://www.haomeiwen.com/subject/adfethtx.html