本文介绍了几种常用的排序算法,包含冒泡排序,选择排序,插入排序,归并排序,快速排序,堆排序,本文涉及的代码可以在https://github.com/lianyingteng/Programming-practice上找到 1. 冒泡排序 时间复杂度为O(n^2), 稳定的排序算法 思路:一开始比较 ...
分类:
编程语言 时间:
2017-10-27 01:18:27
阅读次数:
205
array=[0,30,20,80,40,50,10,60,70,90]
#待排序序列
#i=4-1或1
#n=len(array)
total=len(array)-1
#调整为大顶堆,i是指从哪个结点开始调整,n代表待排序元素总数
defadjust_heap(n,i,array):
#length=len(array)
#print_tree(array)
whilei*2<=n:
lchild_index=2*i
max_child..
分类:
编程语言 时间:
2017-10-26 00:04:05
阅读次数:
209
堆排序(HeapSort)概念堆在树中是一个完成二叉树
堆分为大顶堆和小顶堆
大顶堆:非叶子结点的值大于或等于其左右孩子结点
小顶堆:非叶子结点的值小于或等于其左右孩子结点
特征:堆的根结点的值肯定是极值堆排序的实现步骤构建完全二叉树
将此完全二叉树调整为堆
根据堆的特性,使..
分类:
编程语言 时间:
2017-10-25 23:36:26
阅读次数:
247
MinHeap基本性质 MinHeap用途 1.求一个数列中的第K大的数,建立一个大小为K的最小堆,堆顶就是第K大的数 2.递归去除最顶元素,用于取top K等。 MinHeap可设置容量上限N带来两个好处: 以上述思想,接下来开始java编码: 我们要用inputs=[1, 2, 5, 12, 7 ...
分类:
编程语言 时间:
2017-10-23 20:47:55
阅读次数:
297
将随意填充的数组排序成堆的形式,然后进行删除堆的操作,因为堆删除的永远是当前堆中最大的,根据这个特性,可以获取有序的数组(排成堆)从最后一个父节点开始向下调整,一直到最上面的父节点。(删除堆)删除操作,获得的是当前最大的值 ...
分类:
编程语言 时间:
2017-10-23 15:02:46
阅读次数:
231
递归排序的两种实现 <script type="text/javascript"> //归并排序(递归实现) //思想:堆排序利用了完全二叉树的性质,但是比较麻烦 //而归并排序则是直接利用构造一颗完全二叉树 //实现策略:先对数据分组,分到只有一个元素是:拷贝数组的元素到本次函数的 //SR数组中 ...
分类:
其他好文 时间:
2017-10-20 10:03:12
阅读次数:
163
一、简介 堆排序(HeapSort)是选择排序的改进版,它可以减少在选择排序中的比较次数,进而减少排序时间,堆排序法用到了二叉树的技巧,它利用堆积树来完成,堆积是一种特殊的二叉树,可分为大根堆和小根堆。 大根堆需要具备的条件: 它是一棵完全二叉树 所有节点的值都大于或等于它左右子节点的值 树根是堆积 ...
分类:
编程语言 时间:
2017-10-19 12:38:50
阅读次数:
153
堆排序过程: 主函数中: public void main(String[] args)1. 定义初始化数组:int[] a = new int[]{.............}2. 循环建堆 调用建堆函数: for (int i = 0; i < a.length - 1; i++) { buil ...
分类:
编程语言 时间:
2017-10-18 21:44:41
阅读次数:
288
#!/usr/bin/env python # -*- coding: utf-8 -*- def heap_sort(arr): l = len(arr) for i in xrange(l/2, -1, -1): form_heap(arr, i, l-1) for i in xrange(l-... ...
分类:
编程语言 时间:
2017-10-18 16:09:08
阅读次数:
210
堆排序 <script type="text/javascript"> //堆是一种特殊的完全二叉树(使用的是二叉树的顺序存储结构):每个节点的值都大于等于孩子节点的是大顶对 //小于等于孩子节点的是小顶对 //排序的思想:将待排的序列构成一个大顶堆,此时把最大值是根节点; //把根节点和最后一个元 ...
分类:
其他好文 时间:
2017-10-18 02:00:43
阅读次数:
155