归并排序是建立在归并操作上的一种有效的排序算法。该算法是採用分治法(Divide and
Conquer)的一个很典型的应用。首先考虑下怎样将将二个有序数列合并。这个很easy,仅仅要从比較二个数列的第一个数,谁小就先取谁,取了后就在相应数列中删除这个数。然后再进行比較,假设有数列为空,那直接将还有...
分类:
其他好文 时间:
2014-06-11 21:52:36
阅读次数:
289
特点唯一一个头节点唯一一个尾节点除头节点外,均只有一个前驱节点除尾节点外,均只有一个后继节点顺序表插入平均移动步数 n/2删除平均移动步数
(n-2)/2查找时间代价 O(n)二分查找时间代价 O(log2n)适合整块存储有序数据,不适合频繁插入删除以及动态扩展。链接表查找时间代价 O(...
分类:
其他好文 时间:
2014-06-11 08:27:00
阅读次数:
156
1. 查找和排序查找:顺序查找、二分查找、二叉搜索树、哈希表顺序查找:T(n) = O(n)
std::find二分查找:T(n) = O(log n) std::binary_search std::lower_bound
std::upper_bound哈希表: T(n) = O...
分类:
其他好文 时间:
2014-06-11 07:45:31
阅读次数:
250
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以...
分类:
其他好文 时间:
2014-06-08 18:07:41
阅读次数:
187
很多时候排序是为了对数据进行归类,比如对城市进行排序,对员工的职业进行排序。这种排序的特点就是重复的值特别多。
如果使用普通的快排对这些数据进行排序,会造成N^2复杂度,但是归并排序和三路快排就没有这样的问题。
三路快排
三路快排的基本思想就是,在对数据进行分区的时候分成左中右三个部分,中间都是相同的值,左侧小于中间,右侧大于中间。
...
分类:
其他好文 时间:
2014-06-08 15:29:45
阅读次数:
197
排序的应用
排序算法有着广泛的应用。
典型的应用有
对名称进行排序
排序MP3音乐文件
显示Google的搜索结果
按标题顺序列出RSS订阅
排序之后下列问题就变得非常简单了
找出中位数
数据库中的二分查找
找出统计数据中的异常值
在邮箱中找出重复的邮件
不是...
分类:
其他好文 时间:
2014-06-08 14:45:20
阅读次数:
197
排序算法是我们工作中使用最普遍的算法,常见的语言库中基本都会有排序算法的实现,比如c标准库的qsort,stl的sort函数等。本文首先介绍直接插入排序,归并排序,堆排序,快速排序和基数排序等比较排序算法,然后介绍计数排序,基数排序等具有线性时间的排序算法。本文主要讨论算法的实现方法,并不会过多介绍...
分类:
其他好文 时间:
2014-06-07 21:23:31
阅读次数:
348
$val){ $high = $mid -1; }else { $low = $mid+1; } }
return "not found";}$array = array(1,2,3,34,534,754,823,9...
分类:
Web程序 时间:
2014-06-07 20:59:25
阅读次数:
340
常用排序算法有以下几种:冒泡排序、插入排序、快速排序、归并排序、堆排序。本文将对五种常用算法分析并实现。//交换两个元素的值 这里列出几种不同写法void
swap(int *a, int *b){ int c = *a; *a = *b; *b = c;}void swap(in...
分类:
其他好文 时间:
2014-06-07 20:30:48
阅读次数:
315
1. 普通的二分查找2. 查找最左边的值3. 查找最右边的值Worst case
performance: O(log n)Best case performance: O(1)Average case performance: O(log
n)Worst case space complexity...
分类:
其他好文 时间:
2014-06-07 11:19:48
阅读次数:
248