/* 利用完全二叉树的性质,一个线性数组可以看做是完全二叉树的层次遍历 每次循环把二叉树按照双亲大于左右孩子的规则调换位置,这样一轮下来,根结点就是最大的那个数 把根结点和最后一个元素交换位置 下一次循环继续调换位置,除了最后一个元素 再一次循环继续调换位置,除了最后一个和倒数第二个元素 依次类推。... ...
分类:
编程语言 时间:
2016-12-26 22:03:55
阅读次数:
255
基本思想:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。直接选择排序1.基本思想2.算法分析 堆排序 1.堆的定义2.大根堆和小根堆3.堆排序与直接插入排序的区别 4.基本思想 调整堆符合堆的性质算法 建成初始堆 5.算法分析 【1】时间复杂度为O... ...
分类:
编程语言 时间:
2016-12-24 22:49:01
阅读次数:
202
1 /* 2 请设计筛选函数void sift(int a[],int k,int n),对a[k] 进行筛选, 3 并利用其设计堆排序算法函数void heapSort(int a[],int n), 4 对a[1]..a[n]进行升序排序。并测试在不同数据规模下的排序效率。(详见lab10_05... ...
分类:
编程语言 时间:
2016-12-23 14:20:10
阅读次数:
213
算法:先生成随机数,赋值到数组,将数组第一个元素a[0]设置为哨兵,函数调用数组和随机数个数n,再设定n/2的根结点与孩子结点进行比较操作,若右孩子存在,则选出三个数里最小的数赋值给根节点,如果右孩子不存在,则只需比较左孩子与根节点大小,一直循环操作至a[1],再从a[2]开始进行根结点与孩子结点进 ...
分类:
编程语言 时间:
2016-12-22 06:36:20
阅读次数:
159
「仅为草稿,尚未详解」 堆排序(C语言版) 走进堆排序 什么是堆 堆实质就是一颗完全二叉树,其任何一非叶子节点满足下列性质。 i=1,2,3...n/2 说明: 既然是完全二叉树,我们就可以用数组来表示! 堆根据上面的性质又分为: 从中不难发现,大顶堆从上往下依次键值减小,小顶堆从上向下键值增大。 ...
分类:
编程语言 时间:
2016-12-18 23:09:16
阅读次数:
346
预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于 ...
分类:
编程语言 时间:
2016-12-18 02:09:08
阅读次数:
321
代码: void HeapSort(int a[], int n){ int Tmp; for (int i = n / 2; i >= 0; i--) PercDown(a, i, n); /*build a heap; we should know that intinially we put ...
分类:
编程语言 时间:
2016-12-18 01:26:09
阅读次数:
270
这篇文章包含了插入排序,希尔排序,堆排序,归并排序和快速排序,是前几篇文章的集合。 一共包括三个文件 sort.h sort.cpp main.cpp 1.main.cpp 2.sort.h 3.sort.cpp ...
分类:
编程语言 时间:
2016-12-14 01:47:21
阅读次数:
254
堆排序,时间复杂度O(N log N),实际使用中慢于使用Sedgewick增量的增量排序。 大致思路: 1.先在数组中建堆,如果是增量排序,则需要建一个大堆 2.每循环一次,把最大的数,也就是nums[0],放入堆尾,同时把nums[0]下滤 ...
分类:
其他好文 时间:
2016-12-13 23:11:19
阅读次数:
231