今天我们再来讨论一下选择类排序,选择类排序分为:简单排序,树形选择排序和堆排序。但我们主要说的是简单和堆排序两个,因为树形选择排序使用了较多的辅助空间,以及和∞进行多余比较,为弥补树型选择排序的这些缺点, J.W.J.Williams 在 1964 年提出了进一步的改进方法,即堆排序.对于我个人而言。。一开始并不是很理解它的算法思想,纠结了许久。在网上查找资料的时候发现这位大神的文章思路十分清晰,...
分类:
编程语言 时间:
2015-02-24 09:11:11
阅读次数:
249
转自tangjz的博客...基础算法模拟搜索广度优先搜索(BFS)优化:双向BFS深度优先搜索(DFS)优化:折半DFS迭代加深搜索(IDS)启发式搜索(Astar)优化:IDAstar优化:剪枝、位运算排序冒泡排序/选择排序基数排序/桶排序计数排序插入排序/希尔排序快速排序归并排序/求逆序对数堆排...
分类:
编程语言 时间:
2015-02-23 10:50:21
阅读次数:
330
选择排序的核心是:每趟选择最小的元素和首部交换。
时间复杂度:O(n^2)。
选择排序是一种不稳定的排序,为什么呢?因为不好处理相等两个数的前后位置,举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。所以稳定排序是一定不会改变相等数之间之前位置关系的。
...
分类:
编程语言 时间:
2015-02-21 17:46:47
阅读次数:
167
堆优先队列:特殊的”队列”,取出元素的顺序是依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序
堆是优先队列的完全二叉树表示。
堆的两个特性:
①结构性:用数组表示的完全二叉树
②有序性:任意结点的关键字是其子树所有结点的最大值,叫最大堆(或最小值,叫最小堆)(注意从根结点到任意结点路径上结点序列的有序性)下面举一个最大堆的例子。
/** 最大堆的操作 */
typedef st...
分类:
编程语言 时间:
2015-02-17 22:21:37
阅读次数:
231
昨日写完冒泡排序,和大多数人的感觉一样,太简单,丝毫没有挑战性。但楼主是一个追求踏实平稳的人,希望地基坚固,也为方便后面学习和研究更加高深的算法。但在研究效率上还有待提高,楼主一定好好努力。今天将会写完选择排序 和 插入排序,本文主在选择排序。一. 算法描写叙述 选择排序:比方在一个长度为N的...
分类:
编程语言 时间:
2015-02-17 19:56:12
阅读次数:
217
在冒泡排序、选择排序编写代码之后,楼主渐渐找到了coding的信心,熟能生巧,就像写词唱曲之前,都得先背诵大量的诗词,熟悉各路歌曲,才干走出自己的路线,有自己的杰作。好吧,来让楼主继续进行"社会主义0基础阶段"的任务,这次是插入排序。一. 算法描写叙述 插入排序:插入即表示将一个新的数据插入到...
分类:
编程语言 时间:
2015-02-16 22:06:29
阅读次数:
193
八大排序算法实现
插入排序算法实现
希尔排序算法实现
选择排序算法实现
冒泡排序算法实现
归并排序算法实现
快速排序算法实现
堆排序算法实现
基数排序算法实现...
分类:
编程语言 时间:
2015-02-15 15:11:43
阅读次数:
154
1.1. 算法思想
对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟...
分类:
编程语言 时间:
2015-02-13 21:14:55
阅读次数:
215
PHP实现编程中4个基本的排序算法:冒泡排序、选择排序、插入排序、快速排序...
分类:
编程语言 时间:
2015-02-13 09:20:46
阅读次数:
196
PHP四大基本排序算法包括:冒泡排序法,快速排序法,选择排序法,插入排序法。 1.冒泡排序 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。 代码...
分类:
编程语言 时间:
2015-02-12 07:03:21
阅读次数:
198