Python中的排序
来源:互联网 发布:2015休闲食品销售数据 编辑:程序博客网 时间:2024/06/05 08:35
最近在学习Python, 想随便 写一下,Python 写一些 排序, 排序 算法 那么多,我也不一一介绍,写几个比较简单的,冒泡,选择,快排,插入排序
用 Python 实现一下,当然 也有参考 网上的写法, 相互学习吧,直接进入正题
1 冒泡排序
冒泡排序 思想 我想大家 都应该理解就是 相邻 两个key 进行比较, 一趟排完后,肯定有一个最值 排到第一个或最后一个位置, 之后 继续这样排,最终排完。
# coding=utf-8#冒泡排序的实现'''''交换排序—冒泡排序(Bubble Sort)'''def bubble_sort(array): length=len(array) for i in range(length-1): for j in range(length-1): if array[j]>array[j+1]: array[j],array[j+1]=array[j+1],array[j] return arrayif __name__ == '__main__': mylist=[1,34,6,21,98,31,7,4,36,16,47,67,37,25,2] print(bubble_sort(mylist))
2 选择排序 :
最基本 的思想,每次 从 待排序列 选择一个最值 ,放在 第一个位置, 之后 在从剩下的 待排序列中选择 一个最大值 放在 第二个位置, 依次类推
# coding=utf-8'''选择排序 实现Python'''def select_sort(array): length=len(array) for i in range(0,length): k = i # 寻找最小元素的下标 for j in range(i+1, length): if array[j] < array[k]: k = j # 找到最小的一个下标,并且和 array[i],交换值,这样array[i],就是最小值 array[i], array[k] = array[k], array[i] return arrayif __name__ == '__main__': mylist=[1,34,6,21,98,31,7,4,27,13,36,47,67,37,25,2] # mylist = [3, 5, 4, 2, 1, 6] print (select_sort(mylist))
3 插入排序
插入排序 , 也是类似, 基本思想, 将序列 分为已经排,未排序, 从未排序列中 依次插入到 已排序列中, 这里 就要注意 如何寻找 恰当的位置,然后 进行 插入。 我这里写的方法, 拿未排的序列的一个值 ,和 已排 序列的最后一个值进行比较,如果已排序列 较大,交换两个值。 之后 继续向前比较,如果 还是大,继续交换,如果不大了,证明已经找到了正确的位置,直接break 出来,开始下一个关键字的排序 ,即可。 看一下 实现:
# coding=utf-8'''@author:chang插入排序 insert_sort'''# 直接插入排序def insert_sort(array): # 遍历数组中的所有元素,其中0号索引元素默认已排序,因此从1开始 # x 为待排序列,从下标1开始取值,默认下标0是排好的。 for x in range(1, len(array)): # 将该元素与已排序好的前序数组依次比较,如果该元素小,则交换 # range(x-1,-1,-1):从x-1倒序循环到0 x-1 x-2 x-3 --> 0 for i in range(x-1, -1, -1): # 判断:如果符合条件则交换 if array[i] > array[i+1]: array[i], array[i+1] = array[i+1], array[i] else: break return arrayif __name__ == '__main__': # mylists = [8,10,9,6,4,16,5,13,26,18,2,45,34,23,1,7,3] # mylists = [1, 34, 6, 21, 98, 31, 7, 4, 56, 59, 27, 13, 36, 47, 67, 37, 25, 2] mylists = [1, 4, 7, 1, 5, 25, 3, 85, 34, 75, 23, 75, 2, 0] print(insert_sort(mylists))
4 快速排序
快速排序, 这个 稍微有点复杂 ,只要理解 partition, 和递归 的概念, 就很容易理解了, 其实 把一个待排序列分成两组,首先 选一个key 作为基准点,通过partition 把 前面的key,都小于 基准点, 后面的都大于基准点, 这样 就是一个partition的过程。最后 partition要返回一个位置,就是 就保证了 上面说的 那个特点,前面的小于基准点,后面的大于基准点。
这样之后, 对前面的一段待排 序列, 在进行 partition,后面的一段 也在进行partition,一直到待排序列长度 为1 , 这样就全部排完了。
# coding=utf-8'''@author:chang快速排序 实现quick_sort'''def partition(array,low,high): #基准点定位为第一个元素 point = array[low] while low < high: #将大于基准点的数放于基准点的右边 while low < high and array[high] >= point: #移到前一个元素 high = high - 1 #当不满足大于基准点,交换基准点 array[low],array[high] = array[high],array[low] while low < high and array[low] < point: low = low + 1 #当不满足小于基准点,交换基准点 array[low], array[high] = array[high], array[low] #返回枢轴的位置。。。重要 return low#外层函数,由于快速排序需要三个参数,为零满足只要两个参数,定义一个外层函数调用实际操作的函数def quick_sort(array,length): q_sort(array,0,length-1)def q_sort(array,low,high): if low < high: point = partition(array,low,high) q_sort(array,low,point-1) q_sort(array,point+1,high)if __name__ == '__main__': mylists = [8,10,9,6,4,16,5,13,26,18,2,45,34,23,1,7,3] quick_sort(mylists,len(mylists)) print (mylists)
总结: 本文 主要写了 Python 实现 冒泡,选择,快速排序,简单插入排序最简单的算法。如果有发现错误,欢迎一起讨论交流。
参考文档:
http://blog.csdn.net/u013719780/article/details/49201143
分享快乐,留住感动 。 如果喜欢可以点赞哦。 2017年 10月 13日 星期五 12:31:11 ---biaoge
- Python中的排序
- python中的归并排序
- Python中的排序
- python中的字典排序!
- python 字典中的排序
- python中的排序
- Python中的字典排序
- Python 中的排序
- python中的排序
- python 中的排序大法
- Python中的排序
- python中的排序
- python中的排序和numpy中的排序
- python中的列表排序操作
- Python中的对象的排序
- Python 中的列表排序函数
- 【Python】Python_learning2:python中的冒泡排序
- Python(8) python中的冒泡排序、快速排序
- Spring 支持 Restful风格 源码分析
- 一张图,告诉你什么是js执行上下文
- Codeforces 808F Card Game(和是素数二分图建图+二分图带权最大独立集)
- 全球最大成人网站 PornHub 也用上了AI,目的是让用户更 Happy
- 马云豪掷三千亿,你又如何能分到100个月季度奖?
- Python中的排序
- iOS【根据经纬度获取地名,根据地名获取经纬度】
- 指针常量、常量指针;指针数组、数组指针;指针函数、函数指针
- git .ssh/config 文件配置 修改端口号等
- Java 中的特殊关键字:1.goto 2.const
- 阿里云首席科学家闵万里:我们为什么敢挑战一百年的制度,因为黑科技能为挽救生命抢来50%的可能性
- 送书 | 跟我一起学《流畅的Python》
- VirtualBox Ubuntu 16.04安装Tensorflow
- Spring + cxf 做服务