一、前言如果需要Java版本的堆排序或者堆排序的基础知识——树的概念,请参看本人博文《排序算法(二)堆排序》关于选择排序的问题选择排序最大的问题,就是不能知道待排序数据是否已经有序,比较了所有数据也没有在比较中确定数据的顺序。堆排序对简单选择排序进行了改进。二..
分类:
编程语言 时间:
2017-10-17 22:50:51
阅读次数:
391
对于n个元素的序列{R0, R1, ... , Rn}当且仅当满足下列关系之一时,称之为堆: (1) Ri <= R2i+1 且 Ri <= R2i+2 (小顶堆) (2) Ri >= R2i+1 且 Ri >= R2i+2 (大顶堆) 堆其实是一个顺序存储的完全二叉树 完全二叉树: 顺序存储: 大 ...
分类:
编程语言 时间:
2017-10-15 19:45:28
阅读次数:
190
都工作2年了还去看排序算法,是不是有点low?是的,不过咱不会,就得看,还是有些东西值得一观的,我看的是《算法》这鸟书。 排序算法大概讲了,冒泡算法,选择算法,插入算法,希尔算法,归并算法,快排算法,三向切分快排算法,接着讲了优先队列,堆排序,索引优先队列,然后扯皮了几种排序算法的归约(归约是指为解 ...
分类:
编程语言 时间:
2017-10-13 17:13:12
阅读次数:
284
不稳定的排序算法:选择排序、快速排序、希尔排序、堆排序 稳定的排序算法:冒泡排序、插入排序、归并排序、基数排序 一、时间复杂度 1、冒泡法: 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)——这是最原始、最慢的排序算法 2、直接插入排序:O(n*n) 3、选择排序:O(n*n) ...
分类:
编程语言 时间:
2017-10-13 12:27:13
阅读次数:
145
1 按照排序特性分类 首先按照排序本身的操作特性可以分为下面几种: (1)插入排序 a.直接插入排序(Insert Sort) O(n^2)(稳定) b.折半插入排序(Binary Insert Sort) (不稳定) c.希尔排序(Shell Sort) (不稳定) (2)交换排序 a.冒泡排序( ...
分类:
编程语言 时间:
2017-10-13 00:43:52
阅读次数:
311
排序算法常用的有: 当数据量不大时, 选择插入或者选择 排序, 不用冒泡排序; 其次,当数据量大而又注重空间复杂性时,, 选择 快速排序或 堆排序; 再次,当数据量大而又允许使用较多附加空间时, 选择桶排序, 最后,当要在已排序数据上增加若干新数据时, 选择插入排序. 摘自.C++数据结构原理与经典 ...
分类:
编程语言 时间:
2017-10-13 00:39:53
阅读次数:
186
http://blog.csdn.net/myjava_024/archive/2008/11/04/3220319.aspx 冒泡排序 冒泡排序是最慢的排序算法。 在实际运用中它是效率最低的算法。 它通过一趟又一趟地比较数组中的每一个元素,使较大的数据下沉,较小的数据上升。 它是O(n^2)的算法 ...
分类:
编程语言 时间:
2017-10-13 00:26:12
阅读次数:
164
图解排序算法(三)之堆排序 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆; ...
分类:
编程语言 时间:
2017-10-12 19:01:34
阅读次数:
232
在算法导论第三版中介绍“堆排序是一种原地排序,如果试图引入数组,那么将失去这一优势。”堆排序的基础是在原有堆上进行排序,即将等待排序的集合先建堆 1.建立最大堆(Max_Heapify) 最大堆满足条件A[Parent[i]]>=A[i] 最大堆唯一能确立的就是数组中的最大元素,相当于一个复杂的Ma ...
分类:
编程语言 时间:
2017-10-12 13:08:09
阅读次数:
162
很多时候,听别人在讨论快速排序,选择排序,冒泡排序等,都觉得很牛逼,心想,卧槽,排序也分那么多种,就觉得别人很牛逼呀,其实不然,当我们自己去了解学习后发现,并没有想象中那么难,今天就一起总结一下各种排序的实现原理并加以实现。 -WH 一、文章编写风格总览 选择排序、插入排序、冒泡排序、归并排序、快速 ...
分类:
编程语言 时间:
2017-10-11 23:52:08
阅读次数:
331