数据结构
文章平均质量分 63
xgc阳光
这个作者很懒,什么都没留下…
展开
-
堆排序
一.概述1.堆排序是一种时间复杂度为O(nlogn)的选择排序,它的中心思想是先建立一个比较有序列的堆,然后逐步将堆中的根节点与最后一个数据交换,最终得到有序的数据2.堆排序对原始数据不敏感,无论原始数据的有序程度如何,堆排序的时间复杂度都是O(nlogn)3.堆排序是一种不稳定的排序方法,且适合待排数据比较多的情况 二.概念完全二叉树:完全二叉树说白了就是所有的结点按照原创 2016-04-15 11:01:12 · 440 阅读 · 0 评论 -
归并排序
归并排序是一种稳定的排序方法,它的中心思想是将两个或者两个以上的有序序列合成一个新的有序表,通过不断的合并得到最终的有序表。最常用的是将2个子序列不断的合并,也就是2路归并排序。递归归并与非递归归并的比较原创 2016-04-21 00:22:07 · 353 阅读 · 0 评论 -
快速排序
快速排序是冒泡排序的升级版,都是通过不断交换数据来进行排序。快速排序的基本思想是:选出一个关键字,通过一次遍历,把比关键字小的数据都放到关键字左边,把比关键字大的数据都放到关键字的右边。然后在对左右两边依次进行快速排序。快速排序的时间复杂度:最坏的情况:所选的关键字每次都是最大值或者最小值,这样的话快速排序就成了冒泡排序,时间复杂度为O(n^2)最优/平均情况:第一次调用partition将整个数组扫描一遍,做n次比较。递归logn次,所以时间复杂度为O(nlogn)空间复杂度:最坏情况:O(n原创 2016-04-21 10:45:04 · 361 阅读 · 0 评论 -
冒泡排序
冒泡排序大概是人们能想到的最简单的排序算法了,他的基本思想就是从后向前依次把小的数交换上来,就像气泡不断的冒出水面一样,因此而得名。冒泡排序的时间复杂度为O(n^2),是一种稳定的排序方法,通过开关标志位可以提高冒泡排序性能时间复杂度:最好的情况就是数据本身就有序,当我们比较n -1 次后发现没有数据交换,则跳出循环,时间复杂度为O(n)最坏的情况是排序出现逆序即从小到大排列的时候,这时需要交换的次数为1+2+3+...+(n-1) = n(n-1)/2因此时间复杂度为O(n^2)原创 2016-04-21 16:34:03 · 334 阅读 · 0 评论 -
选择排序
简单选择排序相当于对冒泡排序的一个改进,冒泡排序是每次比较都交换数据,而选择排序则是有目的性的交换。简单排序的基本思想是选出最小的数与首位交换,再选出第二小的数和次位交换,以此类推。简单选择排序的时间复杂度为O(n^2),是一种稳定的排序。简单选择排序时间复杂度:无论数据的有序情况如何,简单选择排序都要进行(n - 1) + (n - 2) + (n - 3) +...+1次比较,所以时间复杂度为O(n^2)原创 2016-04-21 21:45:03 · 278 阅读 · 0 评论 -
直插排序
直插排序,顾名思义就是将一个新的数据直接插入到已经排好的数据当中,它也是一种稳定的排序方法,时间复杂度为O(n^2)。时间复杂度:最好的情况下,本身有序,只需遍历比较一次即可,时间复杂度为O(n)最坏的情况下,即待排序为逆序时,需要比较1 + 2 + ... + (n - 1)次,因此时间复杂度为O(n^2)原创 2016-04-22 10:20:05 · 2742 阅读 · 0 评论 -
希尔排序
相比如冒泡排序、选择排序、直插排序等一些简单的排序算法,希尔排序是第一个在时间复杂度上突破O(n^2)的,其时间复杂度为O(n^1.5),但是希尔排序是一种不稳定的排序方式。希尔排序实际上是直插排序(http://blog.csdn.net/xgcyangguang/article/details/51217354)的优化,直插排序是在后面的数据中找到最小的插入到当前位置,而希尔排序在找到最小的数据这个过程中就把较大的数据移到了后面,把较小的数据放到了前面,让整个数据变得相对有序。原创 2016-04-22 10:21:58 · 415 阅读 · 0 评论 -
数据排序方法的比较
总结一下不同的数据排序算法首先,排序根据排序方式的不同分为四大类:插入排序、选择排序、交换排序、归并排序从时间复杂度来看,显然堆排、快排、归并要更好一些,而归并排序牺牲了空间复杂度换取了稳定性的提升,在一些非常在乎稳定性的环境中用归并排序是一个不错的选择。而在一些非常在意内存容量的环境中,几乎没有多占用堆排序就显得更好了。相对于三种比较复杂的排序方法,如果数据量很小的话那么冒泡排序、直插排序来的更快一些假如说需要排序的每个数据本身非常庞大,那么可以选择交换次数比较少的简单选择排序。不受初始数原创 2016-04-22 15:24:10 · 560 阅读 · 0 评论