下图是各种排序方法的时间复杂度、空间复杂度和稳定性,大牛编程吧教你如何编程提升。

1.直接插入排序。

直接插入的基本思想是每一步将一个数插入到已排序的有序数列中。

python代码实现:

def direct_insert_sort(l):for i in range(1,len(l)):key = l[i]j = i-1while j>=0:if key<l[j]:l[j+1] = l[j]l[j] = keyj -= 1return l
a = [2,3,1,5,4,4]

2.Shell排序(希尔排序)。

希尔排序是直接插入排序的改进版本希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

python代码实现:

def shell_sort(l):c = len(l)step = len(l)//2while step>0:for i in range(step):j = i+stepwhile j<c:key = l[j]p = j-stepwhile p>=0:if key<l[p]:l[p+step] = l[p]l[p] = keyp -= stepj += stepstep = step//2return l
a = [2,3,1,5,4,4]
print(shell_sort(a))  

3.直接选择排序。

直接选择排序是每次找到未排序元素中最小的元素放到最前面具体实现是第一趟将第一个元素与后面所有元素比较,小的放前面,第二趟得到第二个元素,这样直至排序完成。

python代码实现:

def direct_choice_sort(l):for i in range(len(l)-1):for j in range(i+1,len(l)):if l[j]<l[i]:l[i],l[j] = l[j],l[i]return l
a = [3,1,4,5,2,2]
print(direct_choice_sort(a))  

4.堆排序。

堆排序是一种选择排序,是用堆结构来完成排序的一种算法,升序用大顶堆,降序用小顶堆;构造大顶堆:一个结点i的左右叶子结点为2i+1,2i+2,最后一个非叶子结点为len(l)//2-1,从最后一个非叶子结点起,开始调整,将大的元素放到父结点上。

python代码实现:

def heap_sort(l):for j in range(len(l),0,-1):#j为堆的长度,c为堆的最大非叶子结点索引c = (j//2)-1#从最大非叶子结点开始调整堆for i in range(c,-1,-1):if (2*i+1)<=(j-1) and l[2*i+1]>l[i]:l[i],l[2*i+1] = l[2*i+1],l[i]if (2*i+2)<=(j-1) and l[2*i+2]>l[i]:l[i],l[2*i+2] = l[2*i+2],l[i]#交换堆顶与最后一个结点l[0],l[j-1] = l[j-1],l[0]return l
a = [67,65,77,38,97,3,33,49,33]
#heap(a)
print(heap_sort(a))

5.冒泡排序。

冒泡排序是从后向前每次比较相邻的2个元素大小,大的放后面,这样一次遍历第一个元素就是最小的,第二次遍历第二个元素就是剩下中最小的,这样直到排序完成。

python代码实现:

def Bubble_sort(l):c = len(l)for i in range(1,c):for j in range(c-1,i-1,-1):if l[j] < l[j-1]:l[j],l[j-1] = l[j-1],l[j]return l
a = [3,1,4,5,2,2]
print(Bubble_sort(a))  

6.快速排序。

快速排序的思想是每次任意取一个元素,如第一个,将剩下比它小的元素的放到它的前面,大的放到它的后面,这样这个元素就已经在最终排序完成的位置上了,然后对小的元素和大的元素继续进行快速排序,这样直至排序完成。

python代码实现:

quick_sort = lambda l:l if len(l)<=1 else quick_sort([i for i in l[1:] if i<=l[0]])+[l[0]]+quick_sort([i for i in l[1:] if i>l[0]])
a = [3,1,4,5,2,2]
print(quick_sort(a))

7.归并排序。

归并排序是一个典型的基于分治的递归算法。先将原数组分成n个小数组然后两两归并。

归并过程:先比较l1,l2的第一个元素大小,如果l1大则将l2的第一个元素添加到输出数组o中,然后l2指向第二个元素继续比较,这样直至排序完成。

python代码实现:

def merge(l1,l2):o = []a1 = 0;a2 = 0if l1==[]:return l2if l2==[]:return l1for i in range(len(l1)+len(l2)):if a1 == len(l1):for j in l2[a2:]:o.append(j)elif a2 == len(l2):for j in l1[a1:]:o.append(j)else:if l1[a1]>=l2[a2]:o.append(l2[a2])a2 += 1else:o.append(l1[a1])a1 += 1return o
def sort(l):if len(l)<=1:return lc = len(l)//2return merge(sort(l[:c]),sort(l[c:]))
a = [67,65,77,38,97,3,33,33]
print(sort(a))  

基数排序写不出来。。

转载于:https://blog.51cto.com/13962326/2173186

今天来谈谈Python中的各种排序总结,含实现代码相关推荐

  1. python中遍历是什么意思_谈谈python中的遍历

    标签: 谈谈python中的遍历 python中也有像java中的for...each....在python中是for...in... 其实感觉差不多,不过python的规则更灵活一点, 只要是可以进 ...

  2. python image 转成字节_(推荐)谈谈Python生态圈图像格式转换问题:含实例解析

    今天为大家带来的内容是:(推荐)谈谈Python生态圈图像格式转换问题:含实例解析 天气冷了,码字手都不利索了!先哈一哈气,各位也要多穿衣服注意保暖哈.话不多说,就直接进入主题了. 在Python生态 ...

  3. python中config命令_Python config.config方法代码示例

    本文整理汇总了Python中config.config方法的典型用法代码示例.如果您正苦于以下问题:Python config.config方法的具体用法?Python config.config怎么 ...

  4. python中get函数是什么意思_详解python中get函数的用法(附代码)_后端开发

    strncmp函数用法详解_后端开发 strncmp函数为字符串比较函数,其函数语法为"int strncmp ( const char * str1, const char * str2, ...

  5. Python中 5个非常有用的单行代码

    Python中 5个非常有用的单行代码 1. 什么是单行代码? 2. 了解和使用单行代码的好处 3. 5个单行代码示例 参考 作为开发人员,你想提高生产力吗?掌握这 5 个 Python 一行代码,你 ...

  6. python数据建模案例源代码_一个完整的数据分析案例 | 用Python建立客户流失预测模型(含源数据+代码)...

    原标题:一个完整的数据分析案例 | 用Python建立客户流失预测模型(含源数据+代码) 来源:数据分析不是个事儿 作者:启方 原文: https://mp.weixin.qq.com/s/_20MN ...

  7. Python中的字典排序

    我想将 b = {'a':234,'b':1,'c':2,'e':2387} 分别按照key和value进行排序,该怎样办呢? Python中比较常用的排序有两个函数, 一.定义 (1)一个是List ...

  8. 如何在python中对列表套列表进行排序_如何实现对Python中列表的排序?

    对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排序 list.sort(func=None, key=None, reverse=False) Py ...

  9. python中的sort排序加换行_python中sort()排序的方法

    python中sort()排序的方法 发布时间:2020-09-01 10:57:52 来源:亿速云 阅读:110 作者:小新 这篇文章主要介绍了python中sort()排序的方法,具有一定借鉴价值 ...

最新文章

  1. 【译】Core Java Questions and Answers【1-33】
  2. 按照 排序 oracle,oracle 按照中文排序
  3. python程序实现双向链表_数据结构-双向链表(Python实现)
  4. 25个吸引眼球的广告设计
  5. Rocketmq源码分析(一)整体架构
  6. 解决Eclipse 项目报错:Unbound classpath container
  7. Awesomplete 屌爆了
  8. 涨知识了!阿里、百度、腾讯的名字竟然是这样来的
  9. expect 赋值shell变量_Shell处理字符串常用技巧终结篇
  10. PhpED和Zend Studio for Eclipse的Debugger配置
  11. Linux 下查看sqlite文件
  12. labeltool标注工具使用说明
  13. 学UG编程,首先要学习什么?那些编程都是操机操出来的吗?
  14. 遗传算法matlab_当结构设计遇到遗传算法应用ANSYS和MATLAB联合优化设计探索(二)...
  15. 免费logo设计在线生成(不定时更新)
  16. 访问请转到 http://hi.baidu.com/yuyu8848
  17. vscode+authorized_keys登录不上的原因
  18. 熵权法STATA程序(第二版修正)
  19. 小明发布_每日LOL圈:LPL春季赛将于13号开赛;小明、阿水、Meiko多人聚餐
  20. 使用 Entrust Lar…

热门文章

  1. Windows Server 2003的功能级别
  2. Hadoop HDFS概念学习系列之shell命令使用HDFS的一些其他命令(十九)
  3. python学习笔记之常用模块用法分析
  4. iphone数据存储之-- Core Data的使用(一)
  5. 在项目中寻找代码的坏味道(命名)
  6. 2009年3月28日四级网络工程师 试卷答案、点评及讨论
  7. webservice传送XML大小估算
  8. Python 网络爬虫的常用库汇总
  9. 快速入门 Python 数据分析实用指南
  10. oracle语句优化pl sql语句,求oracle插入初始数据pl/sql语句优化,该怎么处理(2)