排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。 内排序有可以分为以下几类: (1)、插入排序:直接插入排序、二分法插入排序、希尔排序。 (2)、选择排序:直接选择排序、堆排序。 (3)、 ...
分类:
编程语言 时间:
2018-04-10 13:39:28
阅读次数:
179
原创文章,转载请注明出处!博客文章索引地址博客文章中代码的github地址# 预备知识 堆是一种特殊的树形数据结构,即完全二叉树。堆分为大根堆和小根堆,大根堆为根节点的值大于两个子节点的值;小根堆为根节点的值小于两个子节点的值,同时根节点的两个子树也分别是一个堆。 ... ...
分类:
编程语言 时间:
2018-04-07 17:43:51
阅读次数:
256
今天整理了下堆排序,以一个局外人的身份重新整理了一下堆排序(以前学的忘了)堆排序建立在二叉树的基础上,复习了一下二叉树,堆排序写起来也就没有什么难度。 还是上代码 ...
分类:
编程语言 时间:
2018-04-07 01:20:04
阅读次数:
217
又是一道数据结构题,使用堆来进行权值调整和排序,每次调整都是o(n)的复杂度,非常高效。 第一眼看题觉得可以用优先队列来做,应该也很简单。 事实上多数优先队列都是通过堆来实现的。 写的时候还是出了一些问题: 1、二叉树根节点下标显然不能为0; 2、限界之后若出现扩界要小心; 3、在迭代循环比较的时候 ...
分类:
编程语言 时间:
2018-04-05 20:07:37
阅读次数:
196
1.排序算法 交换类排序 - 冒泡排序 鸡尾酒排序 奇偶排序 梳子排序 侏儒排序 快速排序 臭皮匠排序 Bogo排序 选择类排序 - 选择排序 堆排序 Smooth排序 笛卡尔树排序 锦标赛排序 圈排序 插入类排序 - 插入排序 希尔排序 二叉查找树排序 图书馆排序 耐心排序 归并类排序 - 归并排 ...
分类:
编程语言 时间:
2018-04-04 15:05:03
阅读次数:
127
前提条件:有N个无序的数,假定它们各不相等,如何选出其中最大的若干个数 解法一: 适用于元素数量不多,内存中可存储整个数组序列。通过快速排序或堆排序对数组排序,时间复杂度为O(N*log2N),然后取出前K个数,时间复杂度为O(K),总时间复杂度为O(N*log2N) + O(K),进一步的,可以知 ...
分类:
其他好文 时间:
2018-03-30 14:09:37
阅读次数:
163
本文章包括所有基本排序算法(和其中一些算法的改进算法): 直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序、快速排序、归并排序、基数排序。 算法复杂度比较: 算法分类 一、直接插入排序 一个插入排序是另一种简单排序,它的思路是:每次从未排好的序列中选出第一个元素插入到已排好的序列中。 它的算法 ...
分类:
编程语言 时间:
2018-03-28 14:19:41
阅读次数:
236
前言 大概花了一周的时间把八大基础排序过了一遍,这篇博文主要是用来回顾一下八大基础排序的要点和一些总结~ 回顾: "冒泡排序就这么简单" "选择排序就这么简单" "插入排序就这么简单" "快速排序就这么简单" "归并排序就这么简单" "堆排序就这么简单" "希尔排序就这么简单" "基数排序就这么简单 ...
分类:
编程语言 时间:
2018-03-27 12:29:07
阅读次数:
228
最近想复习下C++,很久没怎么用了,毕业时的一些经典排序算法也忘差不多了,所以刚好一起再学习一遍。 除了冒泡、插入、选择这几个复杂度O(n^2)的基本排序算法,希尔、归并、快速、堆排序,多多少少还有些晦涩难懂,幸好又博客园大神dreamcatcher-cx都总结成了图解,一步步很详细,十分感谢。 而 ...
分类:
编程语言 时间:
2018-03-27 10:23:40
阅读次数:
261
一、简单选择排序 1、思想:每遍历一次都记住了当前最小(大)元素的位置,最后仅需一次交换操作即可将其放到合适的位置。与冒泡排序相比,移动数据次数少,节省时间 ,性能优于冒泡排序。 2、时间复杂度: 最好:O(N2),正序 最坏:O(N2),逆序 平均:O(N2) 3、辅助空间:O(1) 4、稳定性: ...
分类:
编程语言 时间:
2018-03-26 10:46:38
阅读次数:
191