while 1: #获得序列阁下叶子节点的下标 left, right = 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) 
2.3交换排序
核心思惟:顾名思义,就是一组待排序的数据元素中,按照地位的先后次序互相比较各自的关键码,如不雅是逆序,则交换这两个数据元素,直到该序列数据元素有序为止。
核心思惟:对于待排序的一组数据元素,把每个数据元素看作有重量的气泡,按照轻气泡不克不及在重气泡之下的原则,将未排好次序的全部元素自上而下的对相邻两个元素依次进行比较和调剂,让较重的元素往下沉,较轻的往膳绫前。
推荐阅读
Android中内存优化的那些事 - 一个有关图片的优化记录
客服群里叫唤着:这个用户图片不显示了,那个用户图片也不显示了。我拿着手上一切正常的测试机,what the hell……默默地打开bugly。 满园春色关不住,遍地内存溢出来!是的,>>>详细阅读
本文标题:常用排序算法比较与分析
地址:http://www.17bianji.com/lsqh/35003.html
1/2 1