一,选择排序 选择排序算法有两种:直接选择排序和堆排序.二,直接选择排序 1.基本思想:第一趟从n个元素的数据序列中选出关键字最大(或最小)的元素并放在最后(或最前)位置,下一趟再从n-1个元素中选择出最大(小)的元素并放在次后(前)位置.以此类推,经过n-1趟完成排序.直接选择算法可用顺序表和.....
分类:
编程语言 时间:
2015-02-08 16:50:47
阅读次数:
222
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较...
分类:
编程语言 时间:
2015-02-07 22:59:47
阅读次数:
281
上一篇文章我们一起学习了直接插入排序,它的原理就是把前i个长度的序列变成有序序列,然后循环迭代,直至整个序列都变为有序的.但是说来说去它还是一个时间复杂度为(n^2)的算法,难道就不能再进一步把时间复杂度降低一阶么?可能有很多同学说快速排序,堆排序,我都会,这些简单的插入排序我都不屑于用.确实,以上几种算法相对于之前的O(n^2)级别的算法真的是弱爆了,效率可能还会差上千万倍,但是我们不妨翻看一下...
分类:
编程语言 时间:
2015-02-06 16:56:28
阅读次数:
121
Go语言的OOP,接口,接口的组合,基础库的函数及接口如何抽象设计,
这些东西在Go的Heap源码及演示例子处理中,都有很好的展示.
在"container/heap"中,它的接口是如下定义的:
type Interface interface {
sort.Interface
Push(x interface{}) // add x as element Len()
Pop() interface{} // remove and return eleme...
分类:
编程语言 时间:
2015-02-05 16:22:40
阅读次数:
262
上一节我们写了树以及二叉树的知识
http://blog.csdn.net/wtyvhreal/article/details/43487095
堆是一种特殊的完全二叉树。
所有父节点都比子节点要小,这样的完全二叉树称为最小堆,反之叫最大堆。
下图一棵完全二叉树,调整为最小堆步骤:
向下调整的代码如下:
从上面可以得到:调...
分类:
编程语言 时间:
2015-02-04 18:50:47
阅读次数:
159
1.小根堆
若根节点存在左子女则根节点的值小于左子女的值;若根节点存在右子女则根节点的值小于右子女的值。
2.大根堆
若根节点存在左子女则根节点的值大于左子女的值;若根节点存在右子女则根节点的值大于右子女的值。
3.结论
(1)堆是一棵完全二叉树(如果公有h层,那么1~h-1层均满,在h层连续缺失若干个右叶子)。
(2)小根堆的根节点的值是最小值,大根堆的根节点的值是最大值。
(3)...
分类:
编程语言 时间:
2015-02-02 21:34:38
阅读次数:
208
package?org.rev.algorithm;
/**
?*?堆排序,时间复杂度为O(nlogn),是利用堆的性质进行的一种选择排序。
?*?
?*?大顶堆是一个完全二叉树,所有的父节点都大于或等于它的左右子节点,即a[i]>=a[2i+1]&&a[...
分类:
编程语言 时间:
2015-02-02 16:14:38
阅读次数:
191
本次主要记录一些经典的排序算法,其中包括冒泡排序、直接选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序、桶排序以及计数排序和基数排序。首先会给出这些排序算法的基本思想,然后给出实现的代码,最后会给出其时间复杂度。
1:冒泡排序
思想:
(1):比较相邻的前后两个元素,如果后面的数据小于前面的数据,则交换这两个数据的位置。这样经过一次遍历,最小的元素将在第0个位置,属于”冒泡”.
(...
分类:
编程语言 时间:
2015-01-29 17:39:27
阅读次数:
288
下面是常见排序算法的速度比较:(从慢到快)
1、冒泡排序O(N^2)
2、简单选择排序O(N^2)
3、直接插入排序O(N^2)
4、折半插入排序O(N^2)
5、希尔排序,近似为O(N^1.25) (尚无定论,但可以确定是N~N^2之间的多项式时间复杂度)
6、堆排序O(NlogN)
7、归并排序O(NlogN)
8、快速排序O(NlogN)
一般来说是快排最快的。但是...
分类:
编程语言 时间:
2015-01-29 09:34:09
阅读次数:
274
各种排序运行时间比较以下表格展现各算法的运行时间:算法最坏情况运行时间平均情况/期望运行时间插入排序θ(n2)θ(n2)归并排序θ(nlgn)θ(nlgn)堆排序O(nlgn)—快速排序θ(n2)θ(nlgn)建立一个类,将之前写的各种排序算法纳入其中,Code如下: class SortMe...
分类:
编程语言 时间:
2015-01-28 21:04:02
阅读次数:
337