这个堆排序是借鉴http://blog.csdn.net/hguisu/article/details/7776068 这个博文所改,首先要感谢博主的精彩分享。简介:堆排序分为两步骤:1、构建一个初始堆(完全二叉树、大顶堆) 2、不断交换堆顶与堆尾的元素,那么堆底的元素都是排好的 3、 调用ad.....
分类:
编程语言 时间:
2015-12-15 15:54:12
阅读次数:
217
做堆排序问题时遇到一个bug,调试了很久才发现原因,是一个小于号和小于等于号的问题,在递归时的边界没考虑周全。代码用java写的,拿出来分析下,首先是网上比较多的使用大于号控制边界的程序:import java.util.*;public class MaxHeap { public stat...
分类:
编程语言 时间:
2015-12-15 14:37:35
阅读次数:
246
堆排序利用到完全二叉树的有关知识,时间复杂度O(nlogn)#include#include#include#includeusing namespace std;const int MAX_A = 100009;//使1到n元素为最大堆void Adjust(int a[],int i,int n...
分类:
编程语言 时间:
2015-12-14 20:58:06
阅读次数:
143
排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内...
分类:
编程语言 时间:
2015-12-14 18:54:42
阅读次数:
881
堆排序 不仅在排序上有较好的时间复杂度,同时最大堆,最小堆在解决top10等问题上有很好的效果。最大堆性质,除了根以为的所有结点i都要满足: A[parent(i)]>=A[i]即,子节点一定小于等于父节点,且任意子树也满足该性质。Max-Heapify是维持最大堆性质的关键。时间复杂度O(lg.....
分类:
编程语言 时间:
2015-12-12 00:03:19
阅读次数:
199
冒泡排序 1 //冒泡排序 2 ////////////////////////////////////////////////////////////////////////// 3 void BubleSort(int a[],int n) 4 { 5 int temp; 6 ...
分类:
编程语言 时间:
2015-12-10 13:01:26
阅读次数:
261
1.从时间复杂度比较 从平均时间复杂度来考虑,直接插入排序、冒泡排序、直接选择排序是三种简单的排序方法,时间复杂度都为O(n2),而快速排序、堆排序、二路归并排序的时间复杂度都为O(nlog2n),希尔排序的复杂度介于这两者之间。若从最好的时间复杂度考虑,则直接插入排序和冒泡排序的时间复杂度最好,....
分类:
编程语言 时间:
2015-12-05 23:58:35
阅读次数:
471
详解:http://www.ahalei.com/thread-5028-1-2.html 1 //删除堆顶之后把最后一个移到堆顶在调整,慢 2 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 9 ...
分类:
编程语言 时间:
2015-12-05 22:30:49
阅读次数:
305
1 #include "iostream" 2 #include "iomanip" 3 #include "time.h" 4 using namespace std; 5 6 #define num 28 7 typedef int type;//type类型为int 8 9 /*10 *...
分类:
编程语言 时间:
2015-12-04 12:38:37
阅读次数:
235
堆排序 堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。既然是堆排序,自然需要先建立一个堆,而建堆的核心内容是调整堆,使二叉树满....
分类:
编程语言 时间:
2015-12-03 11:33:12
阅读次数:
244