程序最美(寻路)

你还在坚持练习你的技术吗?运动员天天训练,音乐家也会演练更难的曲章。你呢?

随笔分类 -  数据结构与算法分析——C语言描述

基于快速排序的快速选择
摘要:基于快速排序的快速选择 ——《数据结构与算法分析——C语言描述》 快速选择有很多方法,这里不做一一介绍。《重谈快速排序》中我们介绍了快速排序的相关实现细节。这里我们介绍一种基于快速排序的快速选择方法。 其实现原理和快速排序类似。 给出一个序列,我们不知道该序列是否已经排好序,如果我们想从中选择第k小的数,该怎么做?最简单最直观的方法是对这个序列进行排序,然后依据k选择索引为k-1数即可。由于排序的时间复杂度为O(NlogN)。所有这种选择第k小的数的时间复杂度是O(NlogN)。 这样会造成一定的浪费,因为我们仅仅是想从中选择第k个小的数,而对序列进行排序导致前k-1个数和后面的n-k个数都是 阅读全文

posted @ 2013-12-19 23:25 unixfy 阅读(718) 评论(0) 推荐(0) 编辑

重谈快速排序
摘要:重谈快速排序 ——《数据结构与算法分析——C语言描述》 快速排序是最为常见的排序算法之一。谷歌、百度“快速排序”,会有很多快速排序的讲解和代码实现。但是这么多实现中,真正好的实现并不多见,快速排序思想很简单,但是实现起来有很多细节需要注意,稍不留意,就会出现错误或者效率降低。 快速排序有如下两个关键点: 1.枢纽元的选择 2.选定了枢纽元后,如何进行左右分割 这两点都会直接影响快速排序的效率,尤其是第二点,如果有些细节实现没有考虑清楚,会导致效率降低,甚至出现死循环。 选定了枢纽元后,进行左右分割有很多方法,只要最后分割的左右两部分元素满足小于或大于枢纽元即可。 常见的方法有挖坑填数法,具体实 阅读全文

posted @ 2013-12-18 00:52 unixfy 阅读(543) 评论(0) 推荐(0) 编辑

导航

点击右上角即可分享
微信分享提示