代码: 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
常见的简单排序算法有冒泡排序、选择排序、插入排序、快排、堆排序、归并排序、希尔排序等,这些排序的理论在网上有很多,这就只给出常见的排序算法源码,上学时候写的,不足之处欢迎大家指正。下面几种排序的主函数入口为:intmain(intargc,char*argv[])
{
inti,len;
inta[]..
分类:
编程语言 时间:
2016-12-11 23:40:31
阅读次数:
213
基本过程 1.将无序数组转换为一个大顶堆2.将大顶堆的顶部元素与数组的最后一个元素交换3.将交换后的堆调整为一个大顶堆4.将堆顶与数组倒数第二个元素交换5.重复以上过程,直至堆中只有一个元素 堆排序实际上也是一种选择排序,只是从前面的元素中选取最大元素的方法是使用堆选取,比直接比较选取节省比较次数。 ...
分类:
编程语言 时间:
2016-12-11 23:14:50
阅读次数:
282
堆是一个数组,可以被看成一个近似的完全二叉树。 树上的每一个结点对应数组中的一个元素 A[1...A.heap-size] PARENT(i) return Li/2j LEFT 2i RIGHT 2i + 1 最大堆的性质 A[PARENT(i)] >= A[i] 最小堆的性子 A[PARENT( ...
分类:
编程语言 时间:
2016-12-11 20:46:14
阅读次数:
315
六、堆排序 ?堆排序是一种树形选择排序,是对直接选择排序的有效改进。 ?堆的定义下:具有n个元素的序列 (h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1) (i=1,2,...,n/2)时称之为堆。在这里只讨论满足前者条件的堆。由堆的 ...
分类:
编程语言 时间:
2016-12-10 13:34:36
阅读次数:
231
1、堆排序的堆,其实是一个 完全二叉树。既是一个结点要么是叶子结点,要么必定有左右两个子节点的树。 2、堆有序:每个结点的值,都必须大于两个子节点。但是两个子结点的大小不作要求。 3、一棵大小为N的完全二叉树,高度为lgN(层)。 用数组实现堆,假设数组下标从0开始,下标为k的元素,它的左子树是2k ...
分类:
编程语言 时间:
2016-12-09 22:11:12
阅读次数:
174
目录 1 问题描述 2 解决方案 2.1 堆排序原理简介 2.2 变治法原理简介 2.3 具体编码 2.4 运行结果截图 1 问题描述 (1)实验题目 用基于变治法的堆排序算法对任意一组给定的数据进行排序 (2)实验目的 1)深刻理解并掌握变治法的设计思想; 2)掌握堆的概念以及如何用变治法把任意给 ...
分类:
编程语言 时间:
2016-12-08 20:55:56
阅读次数:
350