作家
登录

常用排序算法比较与分析

作者: 来源: 2017-04-27 15:03:33 阅读 我要评论

 while 1: 
  • #获得序列阁下叶子节点的下标 
  •  leftright = LEFT(i), RIGHT(i) 
  • #当左叶子节点的下标小于序列长度 并且 左叶子节点的值大年夜于父节点时,将左叶子节点的下标赋值给largest 
  •  if (left < length) and (data_list[left] > data_list[i]): 
  •  largest = left 
  •  #print('左叶子节点'
  •  else
  •  largest = i 
  • #当右叶子节点的下标小于序列长度 并且 右叶子节点的值大年夜于父节点时,将右叶子节点的下标值赋值给largest 
  •  if (right < length) and (data_list[right] > data_list[largest]): 
  •  largest = right 
  •  #print('右叶子节点'
  • #如不雅largest不等于i 解释当前的父节点不是最大年夜值,须要交换值 
  •  if (largest != i): 
  •  temp = data_list[i] 
  •  data_list[i] = data_list[largest] 
  •  data_list[largest] = temp 
  •  i = largest 
  •  #print(largest) 
  •  continue 
  •  else
  •  break 
  •   
  • #********** 建立大年夜顶堆 ********** 
  • def build_max_heap(data_list): 
  •  length = len(data_list) 
  •  for x in range(int((length-1)/2),-1,-1): 
  •  adjust_max_heap(data_list,length,x) 
  •   
  • #********** 堆排序 ********** 
  • def heap_sort(data_list): 
  • #先建立大年夜顶堆,包管最大年夜值位于根节点;并且父节点的值大年夜于叶子结点 
  •  build_max_heap(data_list) 
  • #i:当前堆中序列的长度.初始化为序列的长度 
  •  i = len(data_list) 
  • #履行轮回:1. 每次掏出堆顶元素置于序列的最后(len-1,len-2,len-3...) 
  • # 2. 调剂堆,史段?续知足大年夜顶堆的性质,留意及时修改堆中序列的长度 
  •  while i > 0: 
  •  temp = data_list[i-1] 
  •  data_list[i-1] = data_list[0] 
  •  data_list[0] = temp 
  • #堆中序列长度减1 
  •  i = i-1 
  • #调剂大年夜顶堆 
  •  adjust_max_heap(data_list, i, 0) 
  • 表4-1各个排序算法比较

    2.3交换排序

    核心思惟:顾名思义,就是一组待排序的数据元素中,按照地位的先后次序互相比较各自的关键码,如不雅是逆序,则交换这两个数据元素,直到该序列数据元素有序为止。

    核心思惟:对于待排序的一组数据元素,把每个数据元素看作有重量的气泡,按照轻气泡不克不及在重气泡之下的原则,将未排好次序的全部元素自上而下的对相邻两个元素依次进行比较和调剂,让较重的元素往下沉,较轻的往膳绫前。


      推荐阅读

      Android中内存优化的那些事 - 一个有关图片的优化记录

    客服群里叫唤着:这个用户图片不显示了,那个用户图片也不显示了。我拿着手上一切正常的测试机,what the hell&hellip;&hellip;默默地打开bugly。 满园春色关不住,遍地内存溢出来!是的,>>>详细阅读


    本文标题:常用排序算法比较与分析

    地址:http://www.17bianji.com/lsqh/35003.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)