思路参考《算法导论》P84 堆排序中用到的最重要的就是堆这种数据结构,也正是因为这种数据结构能把时间复杂度控制在O(n * lgn) heapsort算法主要依赖于两个函数 MAX_HEAPIFY(int *A,int i,int len) 用于维护最大堆,时间复杂度为O(lgn),注意书上描述这个 ...
分类:
编程语言 时间:
2018-01-13 18:52:57
阅读次数:
205
//heapsort #include using namespace std; const int maxn =105; int a[maxn]; int n; void HeapInsert(int a[],int index) { while(a[index] > a[(index-1)/2]... ...
分类:
编程语言 时间:
2018-01-13 14:23:44
阅读次数:
164
一、堆排序算法的基本特性时间复杂度:O(nlgn)...//等同于归并排序最坏:O(nlgn)空间复杂度:O(1).不稳定。 二、堆与最大堆的建立要介绍堆排序算法,咱们得先从介绍堆开始,然后到建立最大堆,最后才讲到堆排序算法。 2.1、堆的介绍 如下图, a),就是一个堆,它可以被视为一棵完全二叉树 ...
分类:
编程语言 时间:
2018-01-01 11:46:41
阅读次数:
177
public static int[] heapSort(int[] arr) { int i; for (i = arr.length / 2; i >= 0; i--) { heapAdjust(arr, i, arr.length - 1); } for (i = arr.length - 1... ...
分类:
编程语言 时间:
2017-12-30 22:39:33
阅读次数:
205
选择排序可以分为:简单选择排序和堆排序(已知位置,找元素)1.简单选择排序原理:就是直接从待排序数组里选择一个最小(最大)的数字,顺序放入数组里,直到数组排好序代码实现:for(int i=0;i 0; i--){ heapAdjust(arr, i, a.length); } //排序 for(i... ...
分类:
编程语言 时间:
2017-12-14 19:23:14
阅读次数:
117
堆排序 public class HeapSort { public static void buildMaxHeap(int[] data, int lastIndex){ for(int i=(lastIndex 1)/2;i =0;i ){ //k保存正在判断的节点 int k=i; //如果 ...
分类:
编程语言 时间:
2017-12-08 19:25:21
阅读次数:
162
public class HeapSort { 1. 2. public static void sort(Comparable[] data) { 3. // 构建最大堆 4. buildMaxHeap(data); 5. // 循环,每次把根节点和最后一个节点调换位置 后面的扔了搞前面的 ... ...
分类:
编程语言 时间:
2017-11-27 12:47:49
阅读次数:
163
堆排序,顾名思义,是采用数据结构堆来进行排序的一种排序算法。 研究没有规律的堆,没有任何意义。特殊的堆有最大堆(父节点值大于等于左右字节点值),最小堆(父节点值小于等于子节点值)。一般采用最大堆来进行排序,图1为最大堆来表示一维数组。 图1 最大堆表示一维数组 2叉树堆的几点特性 1、 最后父节点索 ...
分类:
编程语言 时间:
2017-11-14 20:10:26
阅读次数:
307
/*堆排序(大顶堆)*/ #include #include using namespace std; void HeapAdjust(int *a,int i,int size) //调整堆 { int lchild=2*i; //i的左孩子节点序号 int rchild=2*i+1; //i的右... ...
分类:
其他好文 时间:
2017-11-12 18:35:18
阅读次数:
136
基本思想: 图示: (88,85,83,73,72,60,57,48,42,6) 平均时间复杂度: O(NlogN)由于每次重新恢复堆的时间复杂度为O(logN),共N - 1次重新恢复堆操作,再加上前面建立堆时N / 2次向下调整,每次调整时间复杂度也为O(logN)。二次操作时间相加还是O(N ...
分类:
编程语言 时间:
2017-11-09 22:44:59
阅读次数:
261