程序最美(寻路)

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

2013年12月19日

快速排序专辑

摘要: 快速排序专辑 有关快速排序的几篇博文:题目网址重谈快速排序链接快速排序的三种分割策略链接基于快速排序的快速选择链接 有关内容持续更新中…… 阅读全文

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

基于快速排序的快速选择

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

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

快速排序的三种分割策略

摘要: 快速排序的三种分割策略 在前面《重谈快速排序》中,我们提到快速排序有两个关键点,分别是:1.枢纽元的选择;2.选定枢纽元后,如何对序列进行左右分割。枢纽元的选择有好几种方法,比如:选择第一个元素作为枢纽元,或者选择中间一个元素,抑或选择最后一个元素,怎么选都可以,也可以随机选择一个元素作为枢纽元。由于快速排序特点,如果枢纽元选择不当,其时间复杂度有可能变为O(N*N)。所以即便是采用伪随机的方式随机选择一个元素作为枢纽元,也有可能选择不当。另外,随机选择需要一定的消耗。除此之外,为了避免一次随机造成的不良影响,可以随机多次进行选择,比如随机选取其中三个元素,选择这三个元素中的中位数作为枢纽元。 阅读全文

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

导航