[数据结构][Python]鸡尾酒排序、桶排序
鸡尾酒排序:
#!/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]鸡尾酒排序、桶排序相关推荐
- java排序——桶排序
2019独角兽企业重金招聘Python工程师标准>>> package jxau.blueDot.lyx;import java.util.ArrayList; import jav ...
- 十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序
养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 十大经典排序算法-堆排序,计数排序,桶排序,基数排序 前言 这是十大经典排序算法详解的最后一篇了. ...
- 算法知识点-排序-桶排序
Notes:在面试过程中,除非明显声明,一般时间复杂度都是基于比较的排序. 桶排序 桶排序是一种排序的思想,它指的是不基于比较的排序,而是利用桶来完成排序的工作,之前介绍的冒泡,选择,插入,快排,堆排 ...
- 记数排序 桶排序 基数排序
为什么要写这样滴一篇博客捏...因为一个新初一问了一道水题,结果就莫名其妙引起了战斗. 然后突然发现之前理解的桶排序并不是真正的桶排序,所以写一篇来区别下这三个十分相似的排序辣. 老年菜兔的觉醒!!! ...
- 【恋上数据结构】基数排序、桶排序、休眠排序
基数排序 前言 基数排序 代码实现 复杂度与稳定性 基数排序-另一种思路 代码实现 复杂度与稳定性 桶排序 实现 复杂度与稳定性 "最强排序"-休眠排序 经典的十大排序算法! 前言 ...
- 【数据结构笔记38】桶排序、基数排序、多关键字排序、排序算法汇总比较
本次笔记内容: 10.3.1 桶排序 10.3.2 基数排序 10.3.3 多关键字排序 10.4 排序算法比较 文章目录 排序算法背景 桶排序 基数排序 多关键字排序(基数排序) 排序算法的比较 排 ...
- 理论基础 —— 排序 —— 桶排序
[概述] 桶排序是一种稳定的排序方法,其是非比较类排序中最简单的一种. 其基本思想是:假设待排序记录的值都在 0~m-1 之间,设置 m 个桶,将值为 i 的记录分配到第 i 个桶中,然后再将各个桶中 ...
- 宇宙最简单排序:桶排序
目录 介绍: 我的程序: 介绍: c++的排序方法非常多,比如啥冒泡啊.选择啊.插入啊......,有时候编游戏也用到排序,但我是一个很勤(lan)快(duo)的人,想用冒泡什么的忒麻烦了,复杂度又高 ...
- 史上最简单的排序-桶排序
原谅我很久都没发作品,主要是本羊羔遇到了点棘手的问题-- 话不多说,进入正题: 目录 题目 精讲桶排概念 实际生活->举例 计算机语言->举例 代码和题目 题目 我们需要给n个自然数排序( ...
最新文章
- zendserver的版本是怎么回事?免费版哪里去了?
- STM32cube HAL库 UART串口中断方式收发任意长度 调试笔记
- Java集合篇:HashMap原理详解(JDK1.7及之前的版本)
- 计算机考研数据结构教材,2016计算机考研:数据结构参考书及复习重点
- 局域网计算机共享加密码,局域网文件共享设置密码的方法
- ARINC429协议芯片DEI1016工作原理
- 安装JDK与配置java环境变量
- CAP--什么是CAP,为何三者不可兼得
- java调用python需要复权吗_用Python从新浪下载A股复权因子信息
- JAVA 实现《JAVA打砖块》游戏
- 对抗攻击(Adversarial Attack)
- 《REAL-TIME INDOOR SCENE RECONSTRUCTION WITH RGBD AND INERTIA INPUT 》 原文翻译与解读
- Mixed Precision Training混合精度训练笔记及框架代码
- 纪录片《Code Rush》
- 【游戏逆向】FPS游戏自瞄透视模块动态加载分析
- Android 高德地图(带有定位和点击显示经度纬度)
- ahri8.php,松鼠症仓库自行更新规则后无法获取正确的title
- 网站建设(一)PHP深入学习
- unity——Survival Shooter:环境角色
- android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测...