博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速排序(Quick sort)值得一提的三个变种算法
阅读量:5221 次
发布时间:2019-06-14

本文共 1040 字,大约阅读时间需要 3 分钟。

快速排序(Quick sort)有三个值得一提的变种算法:平衡快排(Balanced quicksort)、外部快排(External quicksort)三路基数快排(Three-way radix quicksort,也称作multikey quicksort、multi-key quicksort)。这里进行一些简要介绍。

  • 平衡快排(Balanced quicksort): 每次尽可能地选择一个能够代表中值的元素作为关键数据,然后遵循普通快排的原则进行比较、替换和递归。
  • 外部快排(External quicksort): 与普通快排不同的是,关键数据是一段buffer,首先将之前和之后的M/2个元素读入buffer并对该buffer中的这些元素进行排序,然后从被排序数组的开头(或者结尾)读入下一个元素,假如这个元素小于buffer中最小的元素,把它写到最开头的空位上;假如这个元素大于buffer中最大的元素,则写到最后的空位上;否则把buffer中最大或者最小的元素写入数组,并把这个元素放在buffer里。保持最大值低于这些关键数据,最小值高于这些关键数据,从而避免对已经有序的中间的数据进行重排。完成后,数组的中间空位必然空出,把这个buffer写入数组中间空位。然后递归地对外部更小的部分,循环地对其他部分进行排序。
  • 三路基数快排(Three-way radix quicksort,也称作multikey quicksort、multi-key quicksort): 结合了基数排序(radix sort,如一般的字符串比较排序就是基数排序)和快排的特点,是字符串排序中比较高效的算法。该算法被排序数组的元素具有一个特点,即multikey,如一个字符串,每个字母可以看作是一个key。算法每次在被排序数组中任意选择一个元素作为关键数据,首先仅考虑这个元素的第一个key(字母),然后把其他元素通过key的比较分成小于、等于、大于关键数据的三个部分。然后递归地基于这一个key位置对“小于”和“大于”部分进行排序,基于下一个key对“等于”部分进行排序。

这是我参考,并以用自己的理解来做的一些翻译,毕竟我没有都实践过这三个变体算法,难免疏漏,还望留言纠正,欢迎大家补充、讨论

转载于:https://www.cnblogs.com/clive/archive/2009/08/13/three_variants_of_quicksort.html

你可能感兴趣的文章
JS小工具_字符串转16进制数组_02
查看>>
信息安全系统设计基础实验四—20135214万子惠20135227黄晓妍
查看>>
一题多解 之 Bat
查看>>
Java 内部类
查看>>
PHP程序员的技术成长规划
查看>>
测试一个对象是否是类字符串
查看>>
{面试题7: 使用两个队列实现一个栈}
查看>>
用JSONP方式跨域请求
查看>>
[Luogu 4135] 作诗
查看>>
[转]SQL中 OVER(PARTITION BY) 取上一条,下一条等
查看>>
前端开发就从认识浏览器开始 - 浏览器处理请求的过程
查看>>
【练习】使用事务和锁定语句
查看>>
centos7升级firefox的flash插件
查看>>
jmeter系列二(jmeter engine相关)
查看>>
前端页面设计问题小计
查看>>
一份超全超详细的 ADB 用法大全
查看>>
Spring定时任务(@Scheduled)
查看>>
WebView 调试
查看>>
IB使用
查看>>
Linux硬链接和软链接(符号链接)
查看>>