Python实现排序算法:冒泡排序,插入排序,选择排序,快速排序,希尔排序
2019独角兽企业重金招聘Python工程师标准>>>
import sys, getopt, randomdef bubble_sort(seq):for i in range(len(seq)):for j in range(1,len(seq)):if seq[j-1]>seq[j]:seq[j-1], seq[j]= seq[j], seq[j-1]return seqdef insertion_sort(seq):for i in range(1,len(seq)):tmp=seq[i]pos=i;for j in range(i-1,-1,-1):if seq[j]>tmp:seq[j+1]=seq[j]pos=jseq[pos]=tmpreturn seqdef selection_sort(seq):for i in range(len(seq)):min_index=i;for j in range(i,len(seq)):if seq[j]<seq[min_index]:min_index=jseq[i],seq[min_index]=seq[min_index],seq[i]return seqdef partition(seq,p,l,r):pivot = seq[p]seq[p],seq[r]=seq[r],seq[p]p_pos = lfor i in range(l,r):if seq[i]<=pivot:seq[i],seq[p_pos]=seq[p_pos],seq[i]p_pos=p_pos+1seq[p_pos],seq[r]=seq[r],seq[p_pos]return p_posdef quick_sort(seq,left,right):if left < right:pivot = random.randint(left,right)mid = partition(seq,pivot,left,right)quick_sort(seq,left,mid-1)quick_sort(seq,mid+1,right)return seqdef shell_sort(seq):incr = len(seq)/2while(incr>=1):for i in range(incr,len(seq)):tmp=seq[i]pos=i;for j in range(i-incr,-1,-incr):if seq[j]>tmp:seq[j+incr]=seq[j]pos=jseq[pos]=tmpincr = incr/2return seqdef usage():print 'Usage: python sort.py sorttype[-q|-i|-b|-s|--shell] sequence'print 'Example: python sort.py -q 11,32,3,24,5'def main():try:if(len(sys.argv)==1) or (len(sys.argv)!=3):raise Exception()else:opts,args=getopt.getopt(sys.argv[1:],'qibs',['shell'])if len(args)>0:seq=[]tmp=args[0].split(',')for i in tmp:seq.append(int(i))else:raise Exception()for opt in opts:if opt[0] =='-q':print quick_sort(seq,0,len(seq)-1)elif opt[0] =='-i':print insertion_sort(seq)elif opt[0] =='-b':print bubble_sort(seq)elif opt[0] =='-s':print selection_sort(seq)elif opt[0] =='--shell':print shell_sort(seq)except Exception,e:usage()print esys.exit()
if __name__ =="__main__":main()
转载于:https://my.oschina.net/Sheamus/blog/395503
Python实现排序算法:冒泡排序,插入排序,选择排序,快速排序,希尔排序相关推荐
- 排序算法图解(四):希尔排序
文章目录 1 希尔排序简介 2 希尔排序算法图解 3 希尔排序代码实现 写在最后 1 希尔排序简介 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法,其也是一种特殊的插入排序, ...
- datatable的数据进行组内排序_排序算法学习分享(四)希尔排序
排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! 排序算法学习分享(一)选择 ...
- 排序算法——冒泡排序、选择排序、直接插入排序
1.冒泡排序 一趟排序的过程,将相邻的两个元素进行比较,如果前一个比后一个大,则将两个元素交换--将最大的元素交换到整个数据的最后. 排序的趟数 = 数据元素的个数 = len - 1 #includ ...
- 三种简单排序算法---冒泡排序,简单选择排序,直接插入排序
冒泡排序 核心思想:类似水泡一样,一趟比较,通过相邻元素的交换,冒出当前序列的最小值(最大值)到相应位置 复杂度分析 最好的情况:序列本身有序,只要进行n-1次比较,无需交换,时间复杂度为O(n) 最 ...
- 基本排序算法比较与选择
http://blog.csdn.net/ctang/article/details/37914 前几天应一个朋友的要求,帮他完成了数据排序的一个作业.觉得很有给大家参考的价值,所以经过他同意,作了些 ...
- 排序算法,最全的10大排序算法详解(Sort Algorithm)
文章目录 排序算法,最全的10大排序算法详解(Sort Algorithm) 排序算法分类 排序算法稳定性 时间复杂度(time complexity) 1#时间复杂度的意义 2#基本操作执行次数 如 ...
- 冒泡排序,插入排序,选择排序三种算法的优劣
https://www.jianshu.com/p/9f724c880124 最近听了王争老师的数据结构与算法之美,大有获益,特写此博客与大家分享. 排序算法太多了,但大体可以归结于三类,冒泡排序,插 ...
- java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...
本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...
- 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序
这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...
- java排序算法(插入排序,冒泡排序,选择排序)
java排序算法(插入排序,冒泡排序,选择排序) 先了解原理,然后自己跟着敲一下,加深印象 CMD编译命令:javac -encoding utf-8 SortList.java && ...
最新文章
- mysql中的自关联详解_Laravel - MySQL数据库的使用详解6(Eloquent ORM用法3:模型关联、关联查询)...
- 中国半光纸市场供需形势分析及运行环境研究报告2021年版
- 首届大湾区 DevOps/微服务秋季分享会圆满落幕!
- c++起始(名词修饰,extern “C” ,引用)
- vue热更新无法关闭_vue-cli3热更新失效
- 数学老师从没这么教过,乘法竖式中进位可以是多位(附Python实现与测试源码)...
- SpringBoot 配置 注入(@value @ConfigurationProperties)
- 以下关于python自动化运维错误的是_建设银行Python自动化运维考试
- 19.Virtual Type
- android 手机关机代码非root,Android手机获取root权限并实现关机重启功能的方法
- wordpress中如何正确书写robots.txt
- 【408考研】数据结构 —— 第一章 绪论
- 国密SM2算法陷入安全危机? 假!SM2仍然安全
- 如何选择项目管理软件?
- 快递100 的 《API URL 所支持的快递公司及参数说明》和《支持的国际类快递及参数说明》
- 2022年CISP考试题库下载
- html语言em,html中em单位 网页代码的问题:em是什么单位?
- android 水印视频教程,如何给视频添加一个摇摆的文字水印?安卓手机视频编辑助手app给视频加文字水印...
- UCS(统一计算系统)[1]
- 小虎的软考辅导视频讲座有啥与众不同?
热门文章
- rpm安装文件制作和使用
- Oracle常用系统表
- java中的易混问题收集
- Windows核心编程 第27章 硬件输入模型和局部输入状态
- LA3027简单带权并查集
- 【C 语言】文件操作 ( 按照内存块的方式读写文件 | fread 函数 | fwrite 函数 )
- 【C 语言】结构体 ( 结构体偏移量计算 | 代码示例 )
- 【C 语言】数组 ( 指针数组用法 | 自我结束能力 )
- 【错误记录】Android Studio 编译报错 ( A problem occurred starting process ‘command ‘ninja.exe‘ ‘ )
- 【OpenGL】三、Visual Studio 2019 配置 GitHub ( 将项目上传到 GitHub )