package com.peter.app.hello.heapsort;/** * heap sort * @author Peter.Yu * */public class HeapSort { public static int COUNT = 0; /** * build heap * @param a * @param size */ public static void buildHe...
分类:
编程语言 时间:
2014-08-06 19:27:52
阅读次数:
269
题目:对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
运用队列,按层遍历,每次遍历一层时,添加新指针,由于每个节点只需要进队一次出队一次,时间复杂度为O(n),空间复杂度为O(n),具体代码如下:
#include
#include
#includ...
分类:
其他好文 时间:
2014-08-06 19:10:42
阅读次数:
184
各类排序算法总结三.交换类排序[接上]2.快速排序 快速排序是通过比较关键码、交换记录,以某个记录为界(该记录称为支点),将待排序列分成两部分。其中,一部分所有记录的关键码大于等于支点记录的关键码,另一部分所有记录的关键码小于支点记录的关键码。我们将待排序列按关键码以支点记录分成两部分的过程,称为一次划分。对各部分不断划分,直到整个序列按关键码有序. 如果每次划分对一个元素定位后,该元素的左侧子序...
分类:
其他好文 时间:
2014-08-05 22:41:20
阅读次数:
388
堆数据结构实际上是一种数组对象,是以数组的形式存储的,但是它可以被视为一颗完全二叉树,因此又叫二叉堆。堆分为以下两种类型:
大顶堆:父结点的值不小于其子结点的值,堆顶元素最大
小顶堆:父结点的值不大于其子结点的值,堆顶元素最小
堆排序的时间复杂度跟合并排序一样,都是O(nlgn),但是合并排序不是原地排序(原地排序:在排序过程中,只有常数个元素是保存在数组以外的空间),合并排序的多有元素都被...
分类:
其他好文 时间:
2014-08-05 22:34:10
阅读次数:
232
数据结构精要------直接选择和堆排序算法...
分类:
其他好文 时间:
2014-08-04 21:35:38
阅读次数:
245
题目: 给定一个二叉树(假设是完全二叉树),把每个节点的next指针指向其右侧节点。
思路:首先想到的是,层序遍历树,在遍历的同时添加节点对右侧节点的指针。
另一种简洁的方法是采用递归来实现,间单直观。...
分类:
其他好文 时间:
2014-08-03 15:23:45
阅读次数:
246
二叉堆(binary heap) 二叉堆数据结构是一种数组对象,它可以被视为一棵完全二叉树。同二叉查找树一样,堆也有两个性质,即结构性和堆序性。对于数组中任意位置i上的元素,其左儿子在位置2i上,右儿子在左儿子后的单元2i+1中,它的父亲在[i/2](向下取整)中。因此,一个数据结构将由一个数组、....
分类:
其他好文 时间:
2014-08-03 12:30:25
阅读次数:
324
排序算法总结(C语言版)1. 插入排序1.1 直接插入排序1.2 Shell排序2. 交换排序2.1 冒泡排序2.2 快速排序3. 选择排序3.1 直接选择排序3.2 堆排序4. 归并排序4.1 二路归并排序4.2 自然合并排序5. 分布排序5.1 基数排序1.插入排序1.1 直接插入排序...
分类:
编程语言 时间:
2014-08-01 23:04:42
阅读次数:
349
一、对堆排序的相关了解
1、堆排序的运行时间是 O(nlogn)
;
2、定义:
堆heap是一棵具有以下属性的二叉树——
(1)它是一棵完全二叉树;
(2)每个结点大于或等于它的任意一个孩子。
备注:完全二叉树的定义——除了最后一层没填满以及最后一层的叶子都是偏左放置的,其他层都是满的二叉树!
3、二叉堆有两种:最大堆和最小堆。在堆排序中我...
分类:
其他好文 时间:
2014-08-01 00:11:00
阅读次数:
269
第一次实现堆排序,花了近两个小时。
主要还是堆调整,原理网上很多,直接给出运行代码和结果:
代码:
#include
using namespace std;
void adjustHeap(int number[],int k,int length){
int t=number[k];
int i;
for(; k*2+1 < length; k=i){
i=k*2...
分类:
其他好文 时间:
2014-08-01 00:10:20
阅读次数:
285