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. 排序算法图解(四):希尔排序

    文章目录 1 希尔排序简介 2 希尔排序算法图解 3 希尔排序代码实现 写在最后 1 希尔排序简介 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法,其也是一种特殊的插入排序, ...

  2. datatable的数据进行组内排序_排序算法学习分享(四)希尔排序

    排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! 排序算法学习分享(一)选择 ...

  3. 排序算法——冒泡排序、选择排序、直接插入排序

    1.冒泡排序 一趟排序的过程,将相邻的两个元素进行比较,如果前一个比后一个大,则将两个元素交换--将最大的元素交换到整个数据的最后. 排序的趟数 = 数据元素的个数 = len - 1 #includ ...

  4. 三种简单排序算法---冒泡排序,简单选择排序,直接插入排序

    冒泡排序 核心思想:类似水泡一样,一趟比较,通过相邻元素的交换,冒出当前序列的最小值(最大值)到相应位置 复杂度分析 最好的情况:序列本身有序,只要进行n-1次比较,无需交换,时间复杂度为O(n) 最 ...

  5. 基本排序算法比较与选择

    http://blog.csdn.net/ctang/article/details/37914 前几天应一个朋友的要求,帮他完成了数据排序的一个作业.觉得很有给大家参考的价值,所以经过他同意,作了些 ...

  6. 排序算法,最全的10大排序算法详解(Sort Algorithm)

    文章目录 排序算法,最全的10大排序算法详解(Sort Algorithm) 排序算法分类 排序算法稳定性 时间复杂度(time complexity) 1#时间复杂度的意义 2#基本操作执行次数 如 ...

  7. 冒泡排序,插入排序,选择排序三种算法的优劣

    https://www.jianshu.com/p/9f724c880124 最近听了王争老师的数据结构与算法之美,大有获益,特写此博客与大家分享. 排序算法太多了,但大体可以归结于三类,冒泡排序,插 ...

  8. java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...

    本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...

  9. 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序

    这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...

  10. java排序算法(插入排序,冒泡排序,选择排序)

    java排序算法(插入排序,冒泡排序,选择排序) 先了解原理,然后自己跟着敲一下,加深印象 CMD编译命令:javac -encoding utf-8 SortList.java && ...

最新文章

  1. mysql中的自关联详解_Laravel - MySQL数据库的使用详解6(Eloquent ORM用法3:模型关联、关联查询)...
  2. 中国半光纸市场供需形势分析及运行环境研究报告2021年版
  3. 首届大湾区 DevOps/微服务秋季分享会圆满落幕!
  4. c++起始(名词修饰,extern “C” ,引用)
  5. vue热更新无法关闭_vue-cli3热更新失效
  6. 数学老师从没这么教过,乘法竖式中进位可以是多位(附Python实现与测试源码)...
  7. SpringBoot 配置 注入(@value @ConfigurationProperties)
  8. 以下关于python自动化运维错误的是_建设银行Python自动化运维考试
  9. 19.Virtual Type
  10. android 手机关机代码非root,Android手机获取root权限并实现关机重启功能的方法
  11. wordpress中如何正确书写robots.txt
  12. 【408考研】数据结构 —— 第一章 绪论
  13. 国密SM2算法陷入安全危机? 假!SM2仍然安全
  14. 如何选择项目管理软件?
  15. 快递100 的 《API URL 所支持的快递公司及参数说明》和《支持的国际类快递及参数说明》
  16. 2022年CISP考试题库下载
  17. html语言em,html中em单位 网页代码的问题:em是什么单位?
  18. android 水印视频教程,如何给视频添加一个摇摆的文字水印?安卓手机视频编辑助手app给视频加文字水印...
  19. UCS(统一计算系统)[1]
  20. 小虎的软考辅导视频讲座有啥与众不同?

热门文章

  1. rpm安装文件制作和使用
  2. Oracle常用系统表
  3. java中的易混问题收集
  4. Windows核心编程 第27章 硬件输入模型和局部输入状态
  5. LA3027简单带权并查集
  6. 【C 语言】文件操作 ( 按照内存块的方式读写文件 | fread 函数 | fwrite 函数 )
  7. 【C 语言】结构体 ( 结构体偏移量计算 | 代码示例 )
  8. 【C 语言】数组 ( 指针数组用法 | 自我结束能力 )
  9. 【错误记录】Android Studio 编译报错 ( A problem occurred starting process ‘command ‘ninja.exe‘ ‘ )
  10. 【OpenGL】三、Visual Studio 2019 配置 GitHub ( 将项目上传到 GitHub )