堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先解说下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是全然二叉树或者是近似全然二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值。2.每一个结点的左子树和右...
                            
                            
                                分类:
其他好文   时间:
2014-06-19 07:54:46   
                                阅读次数:
174
                             
                         
                    
                        
                            
                            
                                参看:数据结构与算法分析-c语言描述public class Main { public static void main(String[] args) { String[] a = { "a", "d", "e", "f", "m" }; String[] b =...
                            
                            
                                分类:
编程语言   时间:
2014-06-18 16:08:33   
                                阅读次数:
211
                             
                         
                    
                        
                            
                            
                                最近做题目饱受打击,愈发觉得打好基础的重要性,于是乎,决心把基本的排序算法还有数组操作一一实现,目的在于一方面能够得到对JAVA基础的巩固,另一面在实现的过程中发现不足。 今天所实现的堆排序(最大堆)算法,最小堆大同小异。然后基于最大堆实现最大优先队列,最大优先队列可应用于作业调度,比如可将作...
                            
                            
                                分类:
编程语言   时间:
2014-06-18 09:52:16   
                                阅读次数:
327
                             
                         
                    
                        
                            
                            
                                堆是一种完全二叉树结构,并且其满足一种性质:父节点存储值大于(或小于)其孩子节点存储值,分别称为大顶堆、小顶堆。堆一般采用数组进行存储(从下标为0开始)。则父节点位置为i,那么其左孩子为2*i + 1,右孩子为2*i + 2。一. 算法描述 堆排序主要分为两个过程:建堆:先使长度为N数组形成一...
                            
                            
                                分类:
其他好文   时间:
2014-06-18 00:08:54   
                                阅读次数:
207
                             
                         
                    
                        
                            
                            
                                接着上一Pa说。就是如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(logi),所以插入所有元素的整体时间复杂度是O(NlogN),代码如下。n=0;
for(i=1;i<=m;i++)
{
n++;
h[n]=a[i..
                            
                            
                                分类:
其他好文   时间:
2014-06-17 17:54:05   
                                阅读次数:
177
                             
                         
                    
                        
                            
                            
                                接着上一Pa说。就是如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(log
 i),所以插入所有元素的整体时间复杂度是O(NlogN),代码如下。
n=0;
for(i=1;i)
{
    n++;
    h[ n]=a[ i];  //或者写成scanf("%d",&h[ n]);
   ...
                            
                            
                                分类:
其他好文   时间:
2014-06-17 16:20:33   
                                阅读次数:
322
                             
                         
                    
                        
                            
                            
                                归并排序(merging Sort) 详解 及 代码本文地址: http://blog.csdn.net/caroline_wendy归并排序(merging sort): 包含2-路归并排序, 把数组拆分成两段, 使用递归, 将两个有序表合成一个新的有序表.归并排序(merge sort)的时间复杂度是O(nlogn), 实际效果不如快速排序(quick sort)和堆排序(heap sort)...
                            
                            
                                分类:
其他好文   时间:
2014-06-17 16:19:56   
                                阅读次数:
232
                             
                         
                    
                        
                            
                            
                                堆排序(heap sort) 详解 及 代码(C++)本文地址: http://blog.csdn.net/caroline_wendy堆排序包含两个步骤: 第一步: 是建立大顶堆(从大到小排序)或小顶堆(从小到大排序), 从下往上建立;第二步: 是依次交换堆顶和堆底, 并把交换后的堆底输出, 只排列剩余的堆, 从上往下建立;代码:/*
 * main.cpp
 *
 *  Created on:...
                            
                            
                                分类:
编程语言   时间:
2014-06-16 22:12:58   
                                阅读次数:
311
                             
                         
                    
                        
                            
                            
                                2014.06.15 22:14简介: 堆是一种非常实用的数据结构,其中以二叉堆最为常用。二叉堆可以看作一棵完全二叉树,每个节点的键值都大于(小于)其子节点,但左右孩子之间不需要有序。我们关心的通常只有堆顶的元素,而整个堆则被封装起来,保存在一个数组中。图示: 下图是一个最大堆: 实现: 优...
                            
                            
                                分类:
编程语言   时间:
2014-06-16 13:16:58   
                                阅读次数:
230
                             
                         
                    
                        
                            
                            
                                堆排序(heapsort)是一种原地(in place)排序算法, 它的时间复杂度是O(nlgn). 堆数据结构不只是在堆排序中有用,它还可以构成一个有效的优先队列。堆数据结构是一种数组对象,它可以被视为一颗完全二叉树。如图: Aheap-size是放在A中堆的元素个数。根据数组节点的索引,我们.....
                            
                            
                                分类:
其他好文   时间:
2014-06-15 21:27:58   
                                阅读次数:
239