之前写过一篇博客是教你几种基本的常见排序算法 ,就说到会有后续的文章出来,继续写写排序问题,参加一些公司的电话面试,还总是会问到写关于排序的问题,大多是关于堆排序,快排序或者海量数据排序,或者从很到的数字序列中找到些中间位置的数字,或者是前K个最小的数字等相关问题,今天正好有空写了写堆排序的代码,自己存储一下,也拿出来共享给大家!
堆排序的算法思路,网上一搜索一堆,本科的课本里面也有较为详细的讲解...
分类:
编程语言 时间:
2015-03-21 23:00:13
阅读次数:
307
也有好几天没记录算法学习情况了,这两天看了《算法导论》的第二部分,排序和顺序统计学,记录一下,也顺便增强记忆1.堆排序 就是最大堆和最小堆,用一维数组存储,数据结构是完全二叉树。主要过程分为构建最大/最小堆,插入操作,弹出最大值,取最大/最小值,改变堆中的权值。 构建堆就是从第一个非叶子节点...
分类:
编程语言 时间:
2015-03-21 22:50:14
阅读次数:
215
堆排序分为建堆,调整堆两个步骤。 关键是分清数组大小和堆大小,因为数组的最后几个元素已经是排好序,相当于从堆中移除了。 ``` #include using namespace std; void HeapAdjust(int *a, int i, int size) { i...
分类:
编程语言 时间:
2015-03-21 11:24:34
阅读次数:
218
堆排序利用了大根堆的两个特点:
1. 堆顶元素是最大元素;
2. 后一次堆调整可以在前一次的基础上进行;
堆排序利用了数组的一个特点:
1. 快速定位指定索引的元素;
使用了以上的特点使得对无序数组进行排序变得简单而高效。...
分类:
编程语言 时间:
2015-03-21 09:52:38
阅读次数:
218
希尔排序的实质就是分组插入排序, 是对直接插入排序的改进。 时间复杂度为O(nlongn), 跟快速排序, 堆排序的时间复杂度相同, 是一种较为快速的排序方式。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的 元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排...
分类:
编程语言 时间:
2015-03-20 23:40:01
阅读次数:
192
堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先解说下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是全然二叉树或者是近似全然二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值。2.每一个结点的左子树和右...
分类:
编程语言 时间:
2015-03-20 14:20:38
阅读次数:
155
插入算法很多,无论是在内功修炼,各种笔试面试都是相当有用的。接下来,将陆续将各种排序算法进行练习:
主要分为以下几个部分(其他后面学习补充):
一、插入类排序:1、直接插入排序;2、折半插入排序;3、希尔shell排序;
二、交换类排序:1、冒泡排序 ;2、快速排序;
三、选择类排序:1、简单选择; 2、堆排序;
本人多使用Java——开始吧!
首先推荐维基百科《排序算法》词条...
分类:
编程语言 时间:
2015-03-20 12:55:22
阅读次数:
187
对于堆排序,首先要先知道什么是堆数据结构,堆数据结构就是一个完全二叉树,但是它有自己的性质.
例如最大堆的性质为:A[PARENT[i]]>=A[i];即每一个结点的值大于等于其左右孩子的值,小于等于其父节点的值。我们在这里只讨论最大堆的情况。我们知道一颗完全二叉树对应一个最大堆的形式,我们要做的就是将二叉树转化为最大堆,这就是所谓的最大堆的维护,我们定义函数MaxheapFY(A,i)来进行操作...
分类:
编程语言 时间:
2015-03-20 11:04:21
阅读次数:
177
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。本文将依次介绍上述八大排序算法。算法一:插...
分类:
编程语言 时间:
2015-03-17 23:13:00
阅读次数:
215
堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先解说下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是全然二叉树或者是近似全然二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值。2.每一个结点的左子树和右...
分类:
编程语言 时间:
2015-03-17 20:03:18
阅读次数:
152