文章目录

  • python 排序算法
    • 1 插入排序
      • 1.1 直接插入排序
        • 算法思想
      • 1.2 希尔排序
        • 算法思想
    • 2. 选择排序
      • 2.1 简单选择排序
    • 2.2 堆排序
    • 参考

python 排序算法

1 插入排序

1.1 直接插入排序

算法思想

直接插入排序的核心思想就是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。
因此,从上面的描述中我们可以发现,直接插入排序可以用两个循环完成:

  • 第一层循环:遍历待比较的所有数组元素

  • 第二层循环:将本轮选择的元素(selected)与已经排好序的元素(ordered)相比较。如果:selected > ordered,那么将二者交换

      #直接插入排序def insert_sort(L):#遍历数组中的所有元素,其中0号索引元素默认已排序,因此从1开始for x in range(1,len(L)):#将该元素与已排序好的前序数组依次比较,如果该元素小,则交换#range(x-1,-1,-1):从x-1倒序循环到0for i in range(x-1,-1,-1):#判断:如果符合条件则交换if L[i] > L[i+1]:L[i] ,L[i+1] = L[i+1],L[i]return L
    

1.2 希尔排序

算法思想

希尔排序在数组中采用跳跃式分组的策略,通过某个增量(gap初始值一般为len(元素长度)//2)将数组元素划分为若干组,然后分组进行插入排序,这算是一趟排序,(下一趟)随后逐步缩小增量,继续按组进行插入排序操作,直至增量为1。希尔排序通过这种策略使得整个数组在初始阶段达到从宏观上看基本有序,小的基本在前,大的基本在后。然后缩小增量,到增量为1时,其实多数情况下只需微调即可,不会涉及过多的数据移动。
解法1:

def shell_sort(alist):"""希尔排序"""n = len(alist)gap = n // 2while gap >= 1:for j in range(gap, n):i = jwhile (i - gap) >= 0:if alist[i] < alist[i - gap]:alist[i], alist[i - gap] = alist[i - gap], alist[i]i -= gapelse:breakgap //= 2if __name__ == '__main__':alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]print("原列表为:%s" % alist)shell_sort(alist)print("新列表为:%s" % alist)

解法2:

def shell_sort(alist):gap = len(alist)while gap > 1:gap = gap // 2for i in range(gap, len(alist)):for j in range(i % gap, i, gap):if alist[i] < alist[j]:alist[i], alist[j] = alist[j], alist[i]return alistalist = shell_sort([4,5,6,7,3,2,6,9,8])
print (alist)

2. 选择排序

2.1 简单选择排序

选择排序不受输入数据的影响,即在任何情况下时间复杂度不变。选择排序每次选出最小的元素,因此需要遍历 n-1 次。

def selectionSort(nums):
for i in range(len(nums) - 1): # 遍历 len(nums)-1 次
minIndex = i
for j in range(i + 1, len(nums)):
if nums[j] < nums[minIndex]: # 更新最小值索引
minIndex = j
nums[i], nums[minIndex] = nums[minIndex], nums[i] # 把最小数交换到前面
return nums

2.2 堆排序

堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:

  • 大根堆:每个节点的值都大于或等于其子节点的值,用于升序排列;
  • 小根堆:每个节点的值都小于或等于其子节点的值,用于降序排列。

参考

(1).https://blog.csdn.net/mxz19901102/article/details/80087596
(2).https://www.jianshu.com/p/bbbab7fa77a2

【排序】算法(python实现)相关推荐

  1. list 排序_十个必知的排序算法|Python实例系列

    十大排序: 1.冒泡排序2.选择排序3.插入排序4.希尔排序5.归并排序6.快速排序7.堆排序8.计数排序9.桶排序10.基数排序 完整代码和注释如下 # -*- coding: UTF-8 -*-# ...

  2. shell sort 最后一列排序_十个必知的排序算法|Python实例系列[1]

    实例内容: 十个必知的排序算法具体代码,并简略的得知每种算法对于不同长度数列的排序时间 十大排序: 1.冒泡排序2.选择排序3.插入排序4.希尔排序5.归并排序6.快速排序7.堆排序8.计数排序9.桶 ...

  3. 排序算法python实现_用Python,Java和C / C ++实现的选择排序算法

    排序算法python实现 The Selection Sort Algorithm sorts the elements of an array. In this article, we shall ...

  4. 排序算法python实现_合并排序算法– Java,C和Python实现

    排序算法python实现 Merge sort is one of the most efficient sorting algorithms. It works on the principle o ...

  5. 十大经典排序算法Python版实现(附动图演示)

    来源:大数据DT 本文约5200字,建议阅读10分钟 排序算法是<数据结构与算法>中最基本的算法之一.本文介绍10种常见的内部排序算法,及如何用Python实现. 排序算法可以分为内部排序 ...

  6. python实现五大基本算法_算法基础:五大排序算法Python实战教程

    排序是每个算法工程师和开发者都需要一些知识的技能. 不仅要通过编码实现,还要对编程本身有一般性的了解. 不同的排序算法是算法设计如何在程序复杂性,速度和效率方面具有如此强大影响的完美展示. 让我们来看 ...

  7. python 按条件选择行和列数据_小白学数据结构-排序算法Python(冒泡、选择、快速、希尔等等)...

    排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们通常所说的排序算法往往指的是内部排序算法,即数据 ...

  8. 数据结构十大经典排序算法--Python

    十大经典排序算法 (java实现看这个)https://program.blog.csdn.net/article/details/83785159 名词解释: 1.冒泡排序 2.选择排序 3.插入排 ...

  9. python语言基本排序算法_排序算法(Python)

    参考: <数据结构(Python 语言描述)> - 3.4 基本排序算法.3.5 更快的排序 Tips:为了保持简洁,每个函数都只处理整数列表,并且假设列表不为空. 目录.jpg 术语 1 ...

  10. 排序算法Python实现合辑

    基本排序算法: 1. 选择排序(seletionSort): 搜索整个列表,找到最小项的位置,如果该位置不是列表的第一个位置,算法就交换这两个位置的项.然后,算法回到第二个位置,并重复这个过程. 时间 ...

最新文章

  1. Hadoop+Hbase分布式集群架构“完全篇”
  2. 生成Apk遇到的问题
  3. 这种玩法闻所未闻,利用python编程自定义QQ的在线状态
  4. 先出报表还是先计提所得税_合并报表投资时点的评估增值和内部交易到底该如何理解????...
  5. 史上最全的程序猿工具集(辅助工具、开发工具、技术栈、学习网站、博客论坛)
  6. (翻译)禁用按钮不应变灰的原因
  7. 铺铜需要把agnd和dgnd分开_电路中的AGND 和DGND怎么处理
  8. 雅马哈推出可以播放黑胶唱片和流行音乐的无线唱盘
  9. (三)cuda8和cuda10的切换
  10. 单片机控制无线传输模块nRF905之模块化编程
  11. MySQL said: Authentication plugin 'caching_sha2_password' cannot be loaded...
  12. java计算机毕业设计绿洲小区快递配送系统源代码+数据库+系统+lw文档
  13. 关于react-router-dom 6.0.1的基础写法 解决Error: A <Route> is only ever to be used as the child of <Routes>
  14. 打破校史!「双非」高校,首发 Science
  15. 计算机学校宣传片创意和构思,【差一步就会02】用PPT做影视宣传片
  16. 手写springboot自动装配 autoConfiguration
  17. oracle 查询数据的结果集导出
  18. 蓝牙版本应该如何选择
  19. Pytorch安装教程 及 解决 torch.cuda.is_available() 返回 False 的问题
  20. 设置openwrt,使wifi路由器既可以连接到外网wifi路由器,并且还能够让无线设备来连接。

热门文章

  1. oracle 9.2.0.4,CentOS 4.7 安装Oracle 9.2.0.4的一些问题
  2. powerdesigner画关系图_想画好手绘,这些图你一定要画一下!
  3. ipoo3可以用鸿蒙,iqooneo3支持无线充电吗_iqooneo3可以无线充电吗
  4. 异常mongodb:Invalid BSON field name XXXXXX:YYYYY.zz
  5. 迭代器以及迭代器的作用
  6. 微信小程序----全局变量
  7. 子类能不能继承父类的构造方法?
  8. 正几边形可以实现无缝拼接?
  9. 后台设置 datakeynames
  10. java 3number_java 数据Number、Math