这里用Python给出几种常用排序算法:

  1. 插入排序
  2. 依次找最小值排序
  3. 冒泡排序
  4. Python列表内部排序(未知算法)
  5. 希尔排序
  6. 快速排序
  7. 堆排序
  8. 树排序

注意:

  • 使用copy模块,注意深复制与浅复制的区别
  • 这里代码尚未经过优化,速度方面有待提高,建议使用Python内置排序函数
# -*- coding: GBK -*-
"""
Created on Mon Oct 10 16:38:16 2016
@author: zhangweiguo
"""import time
import copy
import random
import threading
import math
import heapq
'''
插入排序
依次找最小值排序
冒泡排序
系统内部排序****best
希尔排序
快速排序
堆排序
树排序
'''
def insert_sort(L):#插入排序t1=time.time()n=len(L)LL=[]for i in xrange(n):a=L[i]LL.append(a)for j in xrange(i):if  a<=LL[j]:b=LL[i]LL[i]=LL[j]LL[j]=bt2=time.time()t=t2-t1return LL,t
def min_sort(L):#直接选择排序:每次找最小值,然后更新原列表t1=time.time()LL=copy.deepcopy(L)LLL=[]n=len(L)for i in xrange(n):m=min(LL)LL.pop(LL.index(m))LLL.append(m)t2=time.time()t=t2-t1return LLL,t
def bubble_sort(L):#冒泡排序t1=time.time()LL=copy.deepcopy(L)n=len(LL)for i in xrange(n):for j in xrange(i,n):a=LL[i]b=LL[j]if a>b:LL[i]=bLL[j]=at2=time.time()t=t2-t1return LL,t    def system_sort(L):#系统内部自定义sort函数t1=time.time()LL=copy.deepcopy(L)LL.sort()t2=time.time()t=t2-t1return LL,t
def hill_sort(L):#希尔排序t1=time.time()LL=copy.deepcopy(L)n=len(L)d=math.floor(n/2)d=int(d)while d>=1:for i in range(n-d):LL[i:i+d+1].sort()d=d/2t2=time.time()t=t2-t1return LL,t
def fast_sort(L):#快速排序def fast_sort_one(LL,LLL,low):n=len(LL)if n==1:LLL[low]=LL[0]returnif n==0:returns=LL[0];L1=[];L2=[]for i in xrange(1,n):if LL[i]>s:L2.append(LL[i])else:L1.append(LL[i])n1 = len(L1);n2 = len(L2)LLL[n1+low]=sleft=lowright=low+n1+1fast_sort_one(L1,LLL,left)fast_sort_one(L2,LLL,right)t1=time.time()LL = copy.deepcopy(L)LLL = copy.deepcopy(L)fast_sort_one(LL,LLL,0)t2=time.time()t=t2-t1return LLL,tdef tree_sort(L):#树排序:两两比较,依次选出最小值def find_min(LL):L_copy = []n = len(LL)n2 = int(n / 2)while len(LL) != 1:if 2 * n2 != n:L_copy.append(LL[n - 1])for i in xrange(n2):if LL[2 * i] > LL[2 * i + 1]:L_copy.append(LL[2 * i + 1])else:L_copy.append(LL[2 * i])LL = copy.deepcopy(L_copy)L_copy = []n = len(LL)n2 = int(n / 2)return LL[0]n=len(L)t1=time.time()L_copy=copy.deepcopy(L)LL=[]for i in xrange(n):s=find_min(L_copy)LL.append(s)L_copy.remove(s)t2=time.time()t=t2-t1return LL,tdef heapq_sort(L):#堆排序,使用内部堆的定义,就不自己自定义啦LL=copy.deepcopy(L)t1=time.time()heapq.heapify(LL)t2=time.time()t=t2-t1return LL,tif __name__=='__main__':L=[]for i in xrange(1000):L.append(random.randint(1,1000))L1,t=insert_sort(L)print '插入排序时间:    ',tL2,t=bubble_sort(L)print '冒泡排序时间:    ',tL3,t=min_sort(L)print '直接选择排序时间:',tL4,t=system_sort(L)print '系统排序时间:    ',tL5,t=hill_sort(L)print '希尔排序时间:    ',tL6,t = fast_sort(L)print '快速排序时间:    ',tL7,t = heapq_sort(L)print '堆排序时间:      ',tL8, t = heapq_sort(L)print '二叉树排序时间    ', t
    #下面用了一个多线程模块,有兴趣可自行添加补全代码,查看效果'''tt1=time.time()T=[]T.append(threading.Thread(target=insert_sort,args=(L,)))T.append(threading.Thread(target=bubble_sort,args=(L,)))for i in T:i.start()T[0].join()T[1].join()tt2=time.time()tt=tt2-tt1print '多线程总时间:',tt'''

结果:(1000个随机数进行排序)

插入排序时间:       0.0579998493195
冒泡排序时间:       0.0650000572205
直接选择排序时间:0.0220000743866
系统排序时间:       0.0019998550415
希尔排序时间:       0.133000135422
快速排序时间:       0.00600004196167
堆排序时间:           0.000999927520752
二叉树排序时间:    0.0

Python_排序算法实现相关推荐

  1. [转载] 令牌桶算法和漏桶算法python_排序算法(七):Bucket Sort 桶排序

    参考链接: 用Python进行存储桶Bucket Sort排序 Couting Sort 计数排序虽然快,但其只能对整数进行排序有一点的局限性.而 Bucket Sort 桶排序则没有这个限制.这里我 ...

  2. 算法面试用c还是python_排序算法(C语言+Python版)宝宝再也不怕面试官写排序算法了...

    直接插入排序 过程: 1. 数据可分看成两个部分,前面的数据是有序的 2. 从后面的数据取出一个元素,插到前面有序数据的合适位置 从右端开始查找,到找到比此元素大的时候,则此元素向后移动,以空出多余的 ...

  3. 十大经典排序算法python_十大经典排序算法的算法描述和代码实现

    这里详细讲解了十大经典算法的分类,例如交换排序.插入排序.选择排序等比较类排序,以及计数排序.桶排序和基数排序的非比较类排序,分析了各种排序算法的复杂度和稳定性,还有JAVA代码的详细实现.对冒泡排序 ...

  4. 伍六七带你学算法 进阶篇-排序算法

    给定一个整数数组 nums,将该数组升序排列. 示例 1: 输入:[5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:[5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 各排序算 ...

  5. C++排序算法实现(更新中)

    比较排序法:如冒泡排序.简单选择排序.合并排序.快速排序.其最优的时间复杂度为O(nlogn). 其他排序法:如桶排序.基数排序等.时间复杂度可以达到O(n).但试用范围有要求. 桶排序:排序的数组元 ...

  6. 十种经典排序算法精粹(c语言版本)

    下面给出这段时间我苦心研究验证过的十种经典排序算法的C语言版本,即下面的排序算法: 插入排序,shell排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,桶排序,基数排序和计数排序.整理出来以作备 ...

  7. 十大排序算法 导图总结

    以下为我们经常用到的十大典型排序算法导图,很多设计以及优化的思想值得去参考学习 因为代码较多,所以都添加到对应的实现注释中了,相关代码可以从Mind-mapping获取xmind源文件 参考文档: 基 ...

  8. C++实现十大排序算法(冒泡,选择,插入,归并,快速,堆,希尔,桶,计数,基数)排序算法时间复杂度、空间复杂度、稳定性比较(面试经验总结)

    排序算法分类 内部排序算法又分为基于比较的排序算法和不基于比较的排序算法,其分类如下: 比较排序:   直接插入排序    希尔排序 (插入)  冒泡排序     快速排序  (交换) 直接选择排序  ...

  9. C++拾取——使用stl标准库实现排序算法及评测

    今天看了一篇文章,讲各种语言的优势和劣势.其中一个观点:haskell非常适合写算法,因为使用者不用去关心具体的计算机实现,而只要关注于操作语义.这让它在专心研究算法的人中非常受欢迎.所以很多时候,语 ...

最新文章

  1. pandas索引复合索引dataframe数据、索引dataframe中指定行和指定列交叉格子的数据内容(getting a specific value)、使用元组tuple表达复合索引的指定行
  2. python中json和字典相互转化
  3. 带你看android的内心世界
  4. asp.net 二级域名(路由方式实现)
  5. Canvas制作动态进度加载水球
  6. 为什么微信推荐这么快?SimSvr在微信推荐系统中的应用实践
  7. layer j基本属性
  8. 逻辑回归案例模板——信用卡欺诈检测
  9. Idea格式化mybatis框架mapper文件
  10. 数学建模笔记(十):博弈模型
  11. 打印机如何取消打印任务
  12. Linux安装显卡驱动
  13. python中开方和平方
  14. kafka集群kafka-eagle安装
  15. JS标签中 阻止默认事件的发生
  16. HTML+CSS基础文字和字体
  17. gazebo入门教程(二)建立简单模型
  18. 2022年9月11日:人生第一次相亲记录
  19. 雾计算(fog computing)
  20. Windows7下解决所有游戏不能全屏的问题。

热门文章

  1. python设置堆大小_Python中的堆问题
  2. linux 字符设备号分配状况
  3. 深度学习中图像预处理均值
  4. DataSet and DataStream
  5. gem install sass 本地配置和淘宝源无效的解决办法
  6. PHP短网址链接在线生成源码 带后台
  7. max unity 方向_在2D游戏中实现方向光照
  8. flink入门_Flink入门:读取Kafka实时数据流,实现WordCount
  9. inner join 和 exists 效率_19 个让 MySQL 效率提高 3 倍的 SQL 优化技巧
  10. PHP二维码在线制作生成系统源码 无需数据库 带logo图标