一、优化

使用之前介绍过的 算法之路_9、荷兰国旗问题 来改进经典快速排序。上一篇快排讲到得是将数组分割成两部分,直至全部有序。而荷兰国旗问题则是将一个数组分成三部分,左边小于比较数字,中间等于比较数字,右边大于比较数字。所以,采用荷兰国旗思想来改进快排,可以在一定情况下减少比较次数(中间等于部分)。

二、代码+注释

package algorithm_02;import logarithmic_device.Sort_logarithmic_device;public class QuickSort {public static void quickSort(int arr[]){if (arr==null||arr.length<2) {return;}quickSort(arr,0,arr.length-1);}public static void quickSort(int[] arr, int L, int R) {if(L<R){/*** 在L-R区间随机找一个数 与数组最后一个数交换 * 来避免数据样本带来的问题(可能会形成O(N^2)的时间复杂度)*/Sort_logarithmic_device.swap(arr, (int)(L+Math.random()*(R-L+1)), R);int bound[]=partition(arr, L, R);//返回等于比较值得区域 quickSort(arr, L, bound[0]-1);//左侧quickSort(arr, bound[1]+1, R);//右侧}}public static int[] partition(int arr[],int L,int R){//同荷兰国旗算法int less=L-1;int more=R+1;while(L<more){if (arr[L]<arr[R]) {//若当前数字小于比较数字 则将小范围前一位与当前数字交换 并且 小范围扩大一位 游标右移一位Sort_logarithmic_device.swap(arr, ++less, L++);}else if (arr[L]>arr[R]) {//若当前数字比比较数字大 则与大范围得前一位交换 并且大范围扩大一位Sort_logarithmic_device.swap(arr, L, --more);}else{//若相等 则游标右移 大范围小范围均不做变化L++;}}return new int[]{less+1,more-1};//返回等于比较数字区域范围}public static void main(String[] args) {int arr[]={1,0,-9,-9,-9,8,5,6,10,-2};quickSort(arr);for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}}}

算法之路_11、优化后的快速排序相关推荐

  1. 排序算法-O(n^2)-优化后的冒泡、简单选择、直接插入 代码实践、解释等

    博主将代码先撸为敬,具体解释均在代码里面. 一 以表格的形式整体出各经典算法的定义(多个版本).理解.示例.比较.总结等 --------------------为反馈划下华丽的分割线-------- ...

  2. QuickSort 优化后的快速排序算法

    1.优化选取枢轴 防止在第一次循环后,整个序列没有实质性的变化,如例子中的序列,则采用三数取中法(median-of-three).即取三个关键字先进行排序,将蹭数作为枢轴,一般是取左端.右端和中间三 ...

  3. C语言快速排序算法及三种优化方式

    C语言快速排序算法及三种优化方式 C语言快速排序算法及三种优化方式 原理 快速排序复杂度分析 1 时间复杂度 2 空间复杂度 快速排序代码实现 1 普通快速排序 2 快速排序优化1-三数取中优化不必要 ...

  4. python扫雷 高级算法_扫雷游戏的布雷算法、策略与优化(附Python代码)

    1 布雷算法的应用 在扫雷游戏中,将雷均匀地分布在局面中依靠一种布雷算法.众所周知,在原始版本的Windows扫雷中,由于布雷算法的缺陷,使得其存在Board Cycle(局面循环).而标准扫雷游戏中 ...

  5. BubbleSort 优化后的冒泡排序算法

    优化后的冒泡排序算法: 在刚开始写的时候,遇到想用size_t(即unsigned int)来表示数组索引,但是在进行比较时,j出现溢出,最后用int型来表示~ 注意点在注释中写明 若为基本有序的情况 ...

  6. 算法之路_10、经典快速排序

    一.算法思路 快速排序(Quicksort)是对冒泡排序的一种改进.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这 ...

  7. 基础排序算法详解与优化

    文章图片存储在GitHub,网速不佳的朋友,请看<基础排序算法详解与优化> 或者 来我的技术小站 godbmw.com 1. 谈谈基础排序 常见的基础排序有选择排序.冒泡排序和插入排序.众 ...

  8. 随机森林算法及贝叶斯优化调参Python实践

    1. 随机森林算法 1.1. 集成模型简介 集成学习模型使用一系列弱学习器(也称为基础模型或基模型)进行学习,并将各个弱学习器的结果进行整合,从而获得比单个学习器更好的学习效果. 集成学习模型的常见算 ...

  9. 【啊哈!算法】算法3:最常用的排序——快速排序

    [啊哈!算法]算法3:最常用的排序--快速排序        上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到 ...

最新文章

  1. ResNets王者回归、「极飞科技」刷新中国农业AI领域最大融资纪录 | AI日报
  2. Windows下使用Visual Studio Code搭建Go语言环境
  3. 闲谈StringBuilder
  4. 《解剖PetShop》系列之三
  5. java jpg结构_Java Class 字节码文件结构分析----附带逐字节码分析图
  6. 2-4:C++快速入门之函数重载
  7. Python机器学习:评价分类结果001准确度和混淆矩阵
  8. MYSQL建表时数据类型的选择
  9. matlab中ifelse能嵌套吗,嵌套if语句(nested if statements)
  10. python flask框架是什么_Python Flask框架详解
  11. 【数据结构和算法笔记】串详解:c实现
  12. 读书笔记-《细说PHP》
  13. 声纹识别demo_科学网—声纹识别、说话人识别软件,SPEAKER v0.1 - 石自强的博文...
  14. 一定要记住这20种PS技术!来美化你的照片
  15. plt.plot()有无分号结果不同
  16. 永久消除自动产生的QQPCMgr
  17. 电脑软件商店哪个好用
  18. 计算机无法打开这个应用,Windows10打开软件时提示“无法打开这个应用”怎么解决?...
  19. 解决Duplicate entry ‘XXX‘ for key ‘XXX‘
  20. dcs常用的冗余方式_DCS的冗余

热门文章

  1. 计算机的符号名称大全集,所有电脑特殊符号 大合集 !
  2. JAVA项目:收费视频播放系统,可以用于各类教学及视频在线展播
  3. udk2017环境搭建编译步骤
  4. Java实现 LeetCode 647 回文子串(暴力)
  5. Mac M1安装homebrew 亲测可用
  6. Hi3516a平台实现osd文字处理
  7. 第一部分 开发环境配置
  8. Excel 绘制简单散点图
  9. 简明教程 | Docker篇 · 其二:Dockerfile的编写
  10. 为什么这么多人都学不会Java,找不到Java工作?在我看来还不是方式不对!