def bubble_sort(arry):n = len(arry)                   #获得数组的长度for i in range(n):for j in range(1,n-i):if  arry[j-1] > arry[j] :       #如果前者比后者大arry[j-1],arry[j] = arry[j],arry[j-1]      #则交换两者return arry
def select_sort(ary):n = len(ary)for i in range(0,n):min = i                             #最小元素下标标记for j in range(i+1,n):if ary[j] < ary[min] :min = j                     #找到最小值的下标ary[min],ary[i] = ary[i],ary[min]   #交换两者return ary
def insert_sort(ary):n = len(ary)for i in range(1,n):if ary[i] < ary[i-1]:temp = ary[i]index = i           #待插入的下标for j in range(i-1,-1,-1):  #从i-1 循环到 0 (包括0)if ary[j] > temp :ary[j+1] = ary[j]index = j   #记录待插入下标else :breakary[index] = tempreturn ary
def shell_sort(ary):n = len(ary)gap = round(n/2)       #初始步长 , 用round四舍五入取整while gap > 0 :for i in range(gap,n):        #每一列进行插入排序 , 从gap 到 n-1temp = ary[i]j = iwhile ( j >= gap and ary[j-gap] > temp ):    #插入排序ary[j] = ary[j-gap]j = j - gapary[j] = tempgap = round(gap/2)                     #重新设置步长return ary
def merge_sort(ary):if len(ary) <= 1 : return arynum = int(len(ary)/2)       #二分分解left = merge_sort(ary[:num])right = merge_sort(ary[num:])return merge(left,right)    #合并数组def merge(left,right):'''合并操作,将两个有序数组left[]和right[]合并成一个大的有序数组'''l,r = 0,0           #left与right数组的下标指针result = []while l<len(left) and r<len(right) :if left[l] < right[r]:result.append(left[l])l += 1else:result.append(right[r])r += 1result += left[l:]result += right[r:]return result
def quick_sort(ary):return qsort(ary,0,len(ary)-1)def qsort(ary,left,right):#快排函数,ary为待排序数组,left为待排序的左边界,right为右边界if left >= right : return arykey = ary[left]     #取最左边的为基准数lp = left           #左指针rp = right          #右指针while lp < rp :while ary[rp] >= key and lp < rp :rp -= 1while ary[lp] <= key and lp < rp :lp += 1ary[lp],ary[rp] = ary[rp],ary[lp]ary[left],ary[lp] = ary[lp],ary[left]qsort(ary,left,lp-1)qsort(ary,rp+1,right)return ary
def heap_sort(ary) :n = len(ary)first = int(n/2-1)       #最后一个非叶子节点for start in range(first,-1,-1) :     #构造大根堆max_heapify(ary,start,n-1)for end in range(n-1,0,-1):           #堆排,将大根堆转换成有序数组ary[end],ary[0] = ary[0],ary[end]max_heapify(ary,0,end-1)return ary#最大堆调整:将堆的末端子节点作调整,使得子节点永远小于父节点
#start为当前需要调整最大堆的位置,end为调整边界
def max_heapify(ary,start,end):root = startwhile True :child = root*2 +1               #调整节点的子节点if child > end : breakif child+1 <= end and ary[child] < ary[child+1] :child = child+1             #取较大的子节点if ary[root] < ary[child] :     #较大的子节点成为父节点ary[root],ary[child] = ary[child],ary[root]     #交换root = childelse :break

常见排序算法的python实现相关推荐

  1. python常见的排序算法_常见排序算法之python实现

    1. 冒泡排序 时间复杂度为O(n^2), 稳定的排序算法 思路:一开始比较的区间是[0,n-1],依次比较相邻两数,哪个数大哪个数就放在后面,这样一次遍历数组后,最大的数会在数组的最后一个位置,然后 ...

  2. python实现常见排序算法

    python实现常见排序算法 快速排序 思想:取出第一个元素把它放到序列的中间某一个正确位置,以它进行分割成左边和右边,再分别对左边和右边进行取元素分割(递归) 递归实现 def quicksort( ...

  3. python常见排序算法解析

    python--常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法,分 ...

  4. 常见排序算法及其对应的时间复杂度、空间复杂度

    常见排序算法及其对应的时间复杂度.空间复杂度: 排序算法经过长时间演变,大体可以分为两类:内排序和外排序.在排序过程中,全部记录存放在内存,则成为内排序:如果排序过程中需要使用外存,则称为外排序,本文 ...

  5. php常见排序算去,PHP兑现常见排序算法

    PHP实现常见排序算法 //插入排序(一维数组) function insert_sort($arr){ $count = count($arr); for($i=1; $i $tmp = $arr[ ...

  6. 八大排序算法的 Python 实现

    八大排序算法的 Python 实现 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入 ...

  7. Java常见排序算法

    Java常见排序算法 转载于:https://www.cnblogs.com/hfultrastrong/p/7829889.html

  8. Java常见排序算法之插入排序

    一.概述 本节由小千给大家分享Java常见排序算法之插入排序,之前我们说过排序是算法中的一部分.所以我们学习排序也是算法的入门,为了能让大家感受到排序是算法的一部分,我举个例子证明一下:比如麻将游戏, ...

  9. android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些

    学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java.为了加入到Java这一高薪行业,很 ...

  10. Java 实现常见排序算法

    Java 实现常见排序算法 1. 综述 复习常见排序算法,用Java实现. 2. 代码 1 package cn.edu.tju.scs; 2 3 public class Sort { 4 publ ...

最新文章

  1. 【Java】 链表的回文结构
  2. 修改Chrome的UserAgent
  3. 2021 三月1日雅思口语考试反思
  4. VTK:几何对象之Cylinder
  5. 读书笔记_探索式测试_混合探索式测试
  6. Java 核心编程技术干货
  7. NMS(Non-Maximum Suppression)非极大值抑制
  8. sC#进阶系列——WebApi 接口参数不再困惑:传参详解
  9. matlab中输入x. 与x的区别
  10. 面试—每日一题(5)
  11. 【Sublime】Mac下使用Sublime编译运行带输入数据的程序
  12. 地址栏js的写法(转载)
  13. 3ds max批量修改贴图名称脚本(最新版本)
  14. P1505 [国家集训队]旅游 (树链剖分)
  15. win10 网络发现 打开保存后,自动关闭
  16. Egg.js VS Thinkjs 简单分析使用
  17. Invalid parameter passed to C runtime function
  18. vue如何跳转支付宝付款页面
  19. SAP MM采购订单上的总账科目如何自动带出来
  20. 什么是集成测试?集成测试方法有哪些?

热门文章

  1. 精彩案例:一碗牛肉面的思考
  2. Linux9.0下构建FTP服务器
  3. 通俗了解神经网络如何避免陷入局部最优
  4. 复变函数:傅里叶级数
  5. 先知平台算法原理简介
  6. hadoop MapReduce 输出结果中文乱码解决
  7. for/map循环里面进行异步操作async/await后返回数据,for里不能直接return执行方法函数...
  8. DUBBO服务启动过程
  9. IE8中动态改变伪元素样式不起作用BUG
  10. Centos 6.5安装python3.5.1