鸡尾酒排序:

#!/usr/bin/python
def _cocktail_sort(the_list):the_len = len(the_list)if the_len <2:#0和1print("无需排序")return the_listelse:while 1:flag = Falsefor i in range(the_len-1):if the_list[i] > the_list[i+1]:the_list[i], the_list[i+1] = the_list[i+1], the_list[i]print(the_list)j = the_len-1while j > 0:if the_list[j-1] > the_list[j]:the_list[j], the_list[j-1] = the_list[j-1], the_list[j]flag = Truej -= 1print(the_list)if flag == False:breakreturn the_list
if __name__ == '__main__':the_list = [6, 4, 5, 1, 8, 7, 2, 3]print("原始的列表是:" + str(the_list))print("鸡尾酒排序之后的列表是:" + str(_cocktail_sort(the_list)))
原始的列表是:
[6, 4, 5, 1, 8, 7, 2, 3]
[4, 6, 5, 1, 8, 7, 2, 3]
[4, 5, 6, 1, 8, 7, 2, 3]
[4, 5, 1, 6, 8, 7, 2, 3]
[4, 5, 1, 6, 8, 7, 2, 3]
[4, 5, 1, 6, 7, 8, 2, 3]
[4, 5, 1, 6, 7, 2, 8, 3]
[4, 5, 1, 6, 7, 2, 3, 8]
[4, 5, 1, 6, 7, 2, 3, 8]
[4, 5, 1, 6, 7, 2, 3, 8]
[4, 5, 1, 6, 2, 7, 3, 8]
[4, 5, 1, 2, 6, 7, 3, 8]
[4, 5, 1, 2, 6, 7, 3, 8]
[4, 1, 5, 2, 6, 7, 3, 8]
[1, 4, 5, 2, 6, 7, 3, 8]
[1, 4, 5, 2, 6, 7, 3, 8]
[1, 4, 5, 2, 6, 7, 3, 8]
[1, 4, 2, 5, 6, 7, 3, 8]
[1, 4, 2, 5, 6, 7, 3, 8]
[1, 4, 2, 5, 6, 7, 3, 8]
[1, 4, 2, 5, 6, 3, 7, 8]
[1, 4, 2, 5, 6, 3, 7, 8]
[1, 4, 2, 5, 6, 3, 7, 8]
[1, 4, 2, 5, 6, 3, 7, 8]
[1, 4, 2, 5, 3, 6, 7, 8]
[1, 4, 2, 3, 5, 6, 7, 8]
[1, 4, 2, 3, 5, 6, 7, 8]
[1, 2, 4, 3, 5, 6, 7, 8]
[1, 2, 4, 3, 5, 6, 7, 8]
[1, 2, 4, 3, 5, 6, 7, 8]
[1, 2, 4, 3, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
鸡尾酒排序之后的列表是:
[1, 2, 3, 4, 5, 6, 7, 8]

桶排序:

如果有一个数组A,包含N个整数,值从1到M,我们可以得到一种非常快速的排序,桶排序(bucket sort)。留置一个数组S,里面含有M个桶,初始化为0。然后遍历数组A,读入Ai时,S[Ai]增一。所有输入被读进后,扫描数组S得出排好序的表。该算法时间花费O(M+N),空间上不能原地排序。
桶排序原理:

桶排序也叫计数排序,简单来说,就是将数据集里面所有元素按顺序列举出来,然后统计元素出现的次数。最后按顺序输出数据集里面的元素。

排序过程如下:

一、初始化桶的大小

把数据集里面每一个元素当作一个桶,由上面问题看出,原始数据范围在0–9之间,因此我就需要有10个桶,如下图

第一行为初始化计数为0,第二行为各个元素。

二、计数

接下来读入第一原始数据为6,则在下标为6的桶中增加1,如下图:

再读入下一个原始数据为8,则在下标为8的桶中增加1,如下图:

以此类推,最后遍历完所有原始数据时,10个桶的计数如下图:

三、输出数据

在完成原始数据的遍历计数后,接下来遍历各个桶,输出数据:

元素0计数为1,则输出0,

元素1计数为2,则输出1 1,

元素2计数为1,则输出2,

元素3计数为1,则输出3,

元素4计数为1,则输出4,

元素5计数为1,则输出5,

元素6计数为1,则输出6,

元素7计数为0,则不输出元素,

元素8计数为1,则输出8,

元素9计数为1,则输出9,

最后结果输出为:0, 1, 1, 2, 3, 4, 5, 6, 8, 9

#!/usr/bin/env python
#-*- coding:utf8 -*-class BucketSort(object):'''self.datas:       要排序的数据列表self.bucketSize:  水桶的大小(数据集的范围,如bucketSize=10,则表示数据集的范围为0-9)self.result:      保存排序后的结果self.bucket:      代表水桶,指数据集内的所有元素_sort():          排序函数show():           输出结果的函数用法:BucketSort(datas, size)   或者BucketSort(datas),size的默认值为100BucketSort(datas)._sort() 这样就是开始排序BucketSort(datas).show()  这样就可以把排序后的结果输出'''def __init__(self, datas, size=100):self.datas = datasself.bucketSize = sizeself.result = [0 for i in range(len(datas))]self.bucket = [0 for i in range(self.bucketSize)]def _sort(self):# 读入各个元素,并在对应的位置统计,当bucket里的元素不为0# 就保存到result里面for num in self.datas:self.bucket[num] += 1j = 0for i in range(self.bucketSize):while(self.bucket[i]):self.result[j] = iself.bucket[i] -= 1j += 1def show(self):print "Resutl is:",for i in self.result:print i,print ''if __name__ == '__main__':try:size = raw_input("Please input size(default=100):")if size:size = int(size)datas = raw_input('Please input some number:')datas = datas.split()datas = [int(datas[i]) for i in range(len(datas))]except Exception:passif size:bks = BucketSort(datas, size)else:bks = BucketSort(datas)bks._sort()bks.show()


本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

[数据结构][Python]鸡尾酒排序、桶排序相关推荐

  1. java排序——桶排序

    2019独角兽企业重金招聘Python工程师标准>>> package jxau.blueDot.lyx;import java.util.ArrayList; import jav ...

  2. 十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 十大经典排序算法-堆排序,计数排序,桶排序,基数排序 前言 这是十大经典排序算法详解的最后一篇了. ...

  3. 算法知识点-排序-桶排序

    Notes:在面试过程中,除非明显声明,一般时间复杂度都是基于比较的排序. 桶排序 桶排序是一种排序的思想,它指的是不基于比较的排序,而是利用桶来完成排序的工作,之前介绍的冒泡,选择,插入,快排,堆排 ...

  4. 记数排序 桶排序 基数排序

    为什么要写这样滴一篇博客捏...因为一个新初一问了一道水题,结果就莫名其妙引起了战斗. 然后突然发现之前理解的桶排序并不是真正的桶排序,所以写一篇来区别下这三个十分相似的排序辣. 老年菜兔的觉醒!!! ...

  5. 【恋上数据结构】基数排序、桶排序、休眠排序

    基数排序 前言 基数排序 代码实现 复杂度与稳定性 基数排序-另一种思路 代码实现 复杂度与稳定性 桶排序 实现 复杂度与稳定性 "最强排序"-休眠排序 经典的十大排序算法! 前言 ...

  6. 【数据结构笔记38】桶排序、基数排序、多关键字排序、排序算法汇总比较

    本次笔记内容: 10.3.1 桶排序 10.3.2 基数排序 10.3.3 多关键字排序 10.4 排序算法比较 文章目录 排序算法背景 桶排序 基数排序 多关键字排序(基数排序) 排序算法的比较 排 ...

  7. 理论基础 —— 排序 —— 桶排序

    [概述] 桶排序是一种稳定的排序方法,其是非比较类排序中最简单的一种. 其基本思想是:假设待排序记录的值都在 0~m-1 之间,设置 m 个桶,将值为 i 的记录分配到第 i 个桶中,然后再将各个桶中 ...

  8. 宇宙最简单排序:桶排序

    目录 介绍: 我的程序: 介绍: c++的排序方法非常多,比如啥冒泡啊.选择啊.插入啊......,有时候编游戏也用到排序,但我是一个很勤(lan)快(duo)的人,想用冒泡什么的忒麻烦了,复杂度又高 ...

  9. 史上最简单的排序-桶排序

    原谅我很久都没发作品,主要是本羊羔遇到了点棘手的问题-- 话不多说,进入正题: 目录 题目 精讲桶排概念 实际生活->举例 计算机语言->举例 代码和题目 题目 我们需要给n个自然数排序( ...

最新文章

  1. zendserver的版本是怎么回事?免费版哪里去了?
  2. STM32cube HAL库 UART串口中断方式收发任意长度 调试笔记
  3. Java集合篇:HashMap原理详解(JDK1.7及之前的版本)
  4. 计算机考研数据结构教材,2016计算机考研:数据结构参考书及复习重点
  5. 局域网计算机共享加密码,局域网文件共享设置密码的方法
  6. ARINC429协议芯片DEI1016工作原理
  7. 安装JDK与配置java环境变量
  8. CAP--什么是CAP,为何三者不可兼得
  9. java调用python需要复权吗_用Python从新浪下载A股复权因子信息
  10. JAVA 实现《JAVA打砖块》游戏
  11. 对抗攻击(Adversarial Attack)
  12. 《REAL-TIME INDOOR SCENE RECONSTRUCTION WITH RGBD AND INERTIA INPUT 》 原文翻译与解读
  13. Mixed Precision Training混合精度训练笔记及框架代码
  14. 纪录片《Code Rush》
  15. 【游戏逆向】FPS游戏自瞄透视模块动态加载分析
  16. Android 高德地图(带有定位和点击显示经度纬度)
  17. ahri8.php,松鼠症仓库自行更新规则后无法获取正确的title
  18. 网站建设(一)PHP深入学习
  19. unity——Survival Shooter:环境角色
  20. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测...

热门文章

  1. 点计算机显示服务器运行失败,win7电脑总是跳出Explorer.exe服务器运行失败的窗口怎么办?...
  2. 职业发展之大数据开发工程师理解
  3. 拓商:拼多多客服回复慢,到底应该怎么解决?
  4. thinkpad卡在logo界面_win7系统开机卡在开机Thinkpad LOGO画面的解决方法
  5. 云游三晋,中机助力|中机智库
  6. 详解数字IC设计全流程
  7. 程旭:CPU方寸上的中国信念
  8. 优秀班组长分享:生产车间管理技巧
  9. 我国实战攻防演练的发展现状
  10. 4.7 检测脸部元素的层次结构