以下是最近学习各种算法的代码实现:#include #include #include #include typedef int EleType;typedef int (*CompFunc)(void *,void *);int IntComp(void * a,void *b){ if(*...
分类:
其他好文 时间:
2014-07-08 00:15:54
阅读次数:
293
第3节 堆排序把n个元素建立一个堆,首先将这n个结点以自顶向下、从左到右的方式从1到n编码,这样可以把n个结点转换成一颗完全二叉树紧接着从最后一个非叶子结点(结点编号为n/2)开始到根节点(结点编号为1),逐个扫描所有结点,根据需要将当前结点向下调整,直到以当前结点为根结点的子树符合堆的特性。#in...
分类:
其他好文 时间:
2014-06-27 18:35:05
阅读次数:
120
在前面的文章STL之heap相关操作算法中介绍了堆的相关操作算法,由于堆的注意主要作用是用于排序,我们也知道堆排序的时间复杂度为o(nlogn),是一种不稳定的排序算法,利用堆这一数据结构,我们可以很快第获取一个大数据中最大(或最小)的k个数。同时,上篇文章中,也提出了相关heap算法的一些问题...
分类:
其他好文 时间:
2014-06-27 08:16:59
阅读次数:
171
前段时间将排序算法从新整理了一下,并对工作原理,时间复杂度,空间复杂度进行了一些简单分析。内容主要包括快速排序,堆排序,归并排序等三种常用排序算法。...
分类:
其他好文 时间:
2014-06-25 06:59:49
阅读次数:
323
heapq模块实现了python中的堆排序,并提供了有关方法。让用Python实现排序算法有了简单快捷的方式。
heapq的官方文档和源码:8.4.heapq-Heap queue algorithm
下面通过举例的方式说明heapq的应用方法
实现堆排序
#! /usr/bin/evn python
#coding:utf-8
from heapq import *
def ...
分类:
编程语言 时间:
2014-06-24 18:47:47
阅读次数:
403
堆排序思想:
堆排序,顾名思义,就是基于堆。堆分为最大堆和最小堆,其实就是完全二叉树。最大堆要求节点的元素都要大于其孩子,最小堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求,其实很好理解。有了上面的定义,我们可以得知,处于最大堆的根节点的元素一定是这个堆中的最大值。其实我们的堆排序算法就是抓住了堆的这一特点,每次都取堆顶的元素,将其放在序列最后面,然后将剩余的元素重新调整为...
分类:
编程语言 时间:
2014-06-24 15:43:29
阅读次数:
193
假设要实现非递减排序,则需要用要大顶堆。此处设计到三个大顶堆的操作:(1)自顶向下调整操作:MaxHeapify(对应堆的SiftDown操作)、(2)利用数组建立大顶堆:BuildMaxHeap、(3)不断交换堆顶元素(堆的最大元素)和堆的末尾元素,实现非递减排序。
优先队列分为最大优先队列和最小优先队列,分别借助于大顶堆和小顶堆。
优先队列有以下基本操作:(1)提取队列中的最大(小)元素;(2)提取队列中的最大(小)元素并从队列中删除;(3)将队列中元素为x的关键字减少(增大)到k,这里假设k的值不大(...
分类:
其他好文 时间:
2014-06-22 20:58:26
阅读次数:
319
前面写了js的排序实现,总得玩玩java的哈。同样,冒泡、选择、快速(这三个之前实现过也写过文章)、堆排序,然后做比较。主要遇到的难点:- -||想轻松点写个封装计时的逻辑,不想每调用一个排序就要写一个计时代码。想想,还是javascript写起来方便;java的话,我想到的方法是写一个抽象类:抽象...
分类:
编程语言 时间:
2014-06-22 12:28:04
阅读次数:
218
本文章用七种思路来查找无序数组中的前k个最小(最大)元素,复杂度随着问题的分析变得越来越低,思路也随着分析变得越来越的。贯穿讲解了快速排序和堆排序的应用,对这两种的排序在阅读本文后会有更深刻的理解。...
分类:
其他好文 时间:
2014-06-22 00:06:29
阅读次数:
347