博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法整理(四):浅析高速排序的优化问题
阅读量:7143 次
发布时间:2019-06-29

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

介绍了高速排序的单边扫描和双边扫描,但么有做对照,今天来简单分析下。

一、单边扫描的缺点

单边扫描最大的缺点是每次都要交换,假设一个数组是 5 4 3 2 1,用单边扫描的话,则从4開始,4要和4交换一次。3要和3交换一次。依次类推,这种无意义的操作。

正因此用双边扫描会更好,第一趟仅仅需交换一次,就能得到1 4 3 2 5这种数组。但双边扫描也是能够进一步优化的。

二、双边扫描的优化

优化一:对key值得选取应该使用随机选取的原则。而非第一个数字。意义大家都懂得。

优化二:前文的方法是挖坑法,从右边找到第一个小于key的数,然后将他放到左边的坑里。这时右边新增了一个坑。将左边的坑的索引加1。接着从左往右找第一个大于key的数,再将它放到右边的坑里。依次类推。为了加高速度。再从右边找到第一个小于key的数后,记索引为j,将它和左边的第一个坑交换(注意是交换,而非单纯的放。)。然后从左边的坑加1扫描,找到第一个大于key的数,然后和j进行交换。然后从j-1開始扫描找第二个小于key的数,依次类推。

优化三:前文介绍了插入排序,他的特点是对一个基本有序的数组进行排序会非常的快,因此在进行高速排序时,能够首先推断right-left的值,假设这个值非常小,则返回。

最后进行一次插入排序就ok!

这也是一种优化思路。

详细的 代码杂家就不附了,网上都能找到。

參考文献:《编程珠玑》11章

转载地址:http://ulgrl.baihongyu.com/

你可能感兴趣的文章
golang之sync.Mutex互斥锁源码分析
查看>>
SAP增强的PA教材内容
查看>>
jQuery系列 第八章 jQuery框架Ajax模块
查看>>
OpenCV中原始图像加载与保存压缩技巧
查看>>
MySQL 8复制性能的增强
查看>>
C#使用Xamarin开发可移植移动应用(3.Xamarin.Views控件)附源码
查看>>
Java 模拟基于UDP的Socket通信
查看>>
我要做 Android 之Fragment
查看>>
有关 Windows Lite 的一切,只为对抗 Chrome OS?
查看>>
Android 自定义控件之SlidingMenuVertical顶部悬浮(垂直折叠抽屉,有滑动渐变回调,可自行添加渐变动画)...
查看>>
NG-ZORRO 7.0.1 发布,Ant Design 的 Angular 实现
查看>>
Django 2.0 model on_delete错误小记
查看>>
ffmpeg中的sws_scale算法性能测试
查看>>
Groovy 处理JSON
查看>>
JEESZ分布式框架简介
查看>>
scala笔记(三)
查看>>
java线程池的原理学习(三)
查看>>
自己编写jQuery插件 之 无缝滚动
查看>>
Java笔记-Comparable 和 Comparator比较
查看>>
小米组织架构巨变的背后,是雷军战争思维的映射
查看>>