- 博客(5)
- 资源 (7)
- 收藏
- 关注
原创 排序算法——堆排序
堆其实是一颗完全二叉树, 结点编号从左到右,从上到下依次递增。通常为了方便计算 根节点的左右孩子结点,会从下表1开始计数。如下面的二叉树,用数组可以表示为:如一个数组为: A = {16, 4, 10, 14, 7, 9, 3, 2, 8, 1}其中 A[1] = 16, A[0] 不使用。其实不从1开始也可以:比如假设 root = i, 那么左孩子 为 2 *i + 1, 右孩子为 2 * i...
2016-06-03 11:47:19 339
原创 排序算法——归并排序(递归)
参考了博文 http://blog.csdn.net/morewindows/article/details/6678165/ 归并排序和快速排序的比较相似, 都是用分治法 + 递归来实现, 不过顺序刚好是反过来的。 快速排序是先找中枢点,将线性表分成2个区域,然后依次对左边部分排序、右边部分排序,是一个不断细化表的过程;而归并则是不停的将两个表合并成一个表的过程, typedef st
2016-06-02 17:37:50 497
原创 快速排序的改进方法
可以在选择中枢结点时,选择left, right,(left+right)/2三个位置中关键字居中的元素。注意需要将选好的中枢结点与左端元素交换位置,因为如果不交换位置,算法就有问题了,这是由于right--在left++先执行,导致right最后退出循环时指向的值一定比中枢结点值小。例如选择的是right作为中枢结点,最后一步会把更小的值交换到最后。void quickSort(Element ...
2016-06-02 12:37:20 2806
原创 改进的插入排序算法
使用数组来做插入排序时有三个过程。 第一:要在有序表中查找插入的位置。 第二: 要移动元素,以存储新的元素。 第三:插入元素。 插入元素很简单,给数组赋值就可以了,主要的优化在第一步和第二部,共有2中改进方法,分别对应第一步和第二步。 1. 折半插入排序。 这种改进的方法主要是在上诉第一步,因为是有序表,如果使用折半查找效率比顺序查找高很多。 2. 链式插入排序。
2016-06-01 20:40:54 1235
原创 排序算法——插入排序
以前学习严蔚敏版的数据结构在博客也写过这个算法,现在回过头来看觉得当时思路有点混乱,写得比较复杂而且难理解,现在学习数据结构基础时重写一下,个人觉得数据结构基础比严蔚敏版的要好,因为分析得更加详细思路更清晰,也有完整代码,当然也可能是我第二次学习数据结构的原因。 插入排序的原理: 首先将线性表的第一个元素当成有序表,然后从第二个元素开始,依次插入到第有序表中完成排序。 例如,有数组
2016-06-01 10:55:24 355
汇编语言第三版
2018-05-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人