/** 与最右边的数比较,* 小于的放在左边* 大于的放在右边* 等于的放在中间*/public static int[] netherlandsFlag(int[] arr, int L, int R){if(L>R){return new int[]{-1,-1};}if(L == R){return new int[]{L,R};}int less = L-1;int more = R;int index = L;while(index<more){if(arr[index] == arr[R]){index++;}else if(arr[index] < arr[R]){swap(arr,++less,index++);}else if(arr[index] > arr[R]){swap(arr,--more,index);}}swap(arr,R,more);return new int[]{less+1,more};}

引出快速排序


public class QuickSortTest {public static void main(String[] args) {int[] arr = {5,3,7,2,0,3,4,1,5};quicksort(arr,0,arr.length-1);for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}}public static void quicksort(int[] arr, int L, int R){if(L >= R){return;}swap(arr, L+(int)Math.random()*(R-L+1),R);  //  随机选择一个数,和最后一个数交换int[] nether = netherlandsFlag(arr,L,R);quicksort(arr,L,nether[0]-1);quicksort(arr,nether[1]+1,R);}private static void swap(int[] arr, int h, int t){int temp = arr[h];arr[h] = arr[t];arr[t] = temp;}/** 与最右边的数比较,* 小于的放在左边* 大于的放在右边* 等于的放在中间*/public static int[] netherlandsFlag(int[] arr, int L, int R){if(L>R){return new int[]{-1,-1};}if(L == R){return new int[]{L,R};}int less = L-1;int more = R;int index = L;while(index<more){if(arr[index] == arr[R]){index++;}else if(arr[index] < arr[R]){swap(arr,++less,index++);}else if(arr[index] > arr[R]){swap(arr,--more,index);}}swap(arr,R,more);return new int[]{less+1,more};  // 等于区域的范围}
}

数据结构-荷兰国旗问题相关推荐

  1. python单链表实现荷兰国旗问题_这道荷兰旗问题,我面试时遇到三次!

    01.题目示例 "荷兰国旗问题" 是计算机科学中的一个经典题目,它是由Edsger Dijkstra提出的.荷兰国旗由红.白.蓝三色组成. 荷兰国旗问题:现在有若干个红.白.蓝三种 ...

  2. 荷兰国旗 Flag of the Kingdom of the Netherlands

    问题描述:现有n个红白蓝三种不同颜色的小球,乱序排列在一起,请通过两两交换任意两个球,使得从左至右的球依次为红球.白球.蓝球.这个问题之所以叫做荷兰国旗,是因为将红白蓝三色的小球弄成条状物,并有序排列 ...

  3. Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)

    Algorithm:C+语言实现之数组相关算法(和为定值的两个数.和为定值的m个数.荷兰国旗.长度为2n的洗牌算法.任意长度数组的洗牌算法) 目录 数组 1.寻找和为定值的两个数 2.和为定值的m个数 ...

  4. 算法练习day4——190321(小和、逆序对、划分、荷兰国旗问题)

    归并排序快的原因: 后面的排序利用了前面排序的结果!!! 1.小和问题 在一个数组中, 每一个数左边比当前数小的数累加起来, 叫做这个数组的小和. 求一个数组的小和. 例子:[1,3,4,2,5] 1 ...

  5. leetcode 75. Sort Colors | 75. 颜色分类(荷兰国旗问题,快速排序)

    题目 https://leetcode.com/problems/sort-colors/ 题解 快速排序3.0(随机快排+荷兰国旗技巧优化) 在arr[L-R]范围上,进行快速排序的过程: 1)在这 ...

  6. 【算法习作】荷兰国旗问题

    1.问题描述:     我们将乱序的红白蓝三色小球排列成有序的红白蓝三色的同颜色在一起的小球组.这个问题之所以叫荷兰国旗,是因为我们可以将红白蓝三色小球想象成条状物,有序排列后正好组成荷兰国旗. 2. ...

  7. 荷兰国旗问题(分三块)

    在说 "荷兰国旗" 问题之前,首先来看一个引例. 给定一个数组arr,和一个数num,请把小于等于num的数放在数组的左边,大于num的数放在数组的右边.要求额外空间复杂度O(1) ...

  8. 【算法】荷兰国旗问题

    本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载. 文章目录 1.概述 2.问题一 2.1 暴力方法 2.2 双指针方法 1.2 问题二(荷兰国旗问题) 1 ...

  9. python单链表实现荷兰国旗问题_快速排序深入之荷兰国旗问题

    一.序言 在使用partition-exchange排序算法时,如快速排序算法(即使选择了一个好的关键元素pivot values),我们往往面临一个很尴尬的境地--当排序对象中有很多重复的元素,pa ...

最新文章

  1. Redis为什么又引入了多线程?单线程不香了?
  2. MFC:ListControl数据修改
  3. 中国大学前10强!校友会2020世界一流大学排名发布
  4. 使用Lightbox制作照片条
  5. IDEA 中的.iml文件和.idea文件夹 ( 隐藏方式 )
  6. 内蒙古农大孙志宏教授证实超深度混合宏基因组测序能够对人类肠道微生物组中的低丰度物种进行基因组和功能表征...
  7. 增强优化JavaScript性能的方法 - 技巧大全
  8. 电脑系统如何锁定计算机,如何删除“解除计算机锁定”页面?
  9. IIS和APACHE共用80端口的方法
  10. Recipe terminated with error. vscode latex-workshop新的配置文件
  11. DEDECMS 另类***
  12. android studio中tabhost自定义,Android Studio——TabWiget组件实现(带图标签)
  13. 大B与小b的区别(Bps与bps)
  14. Windos配置本地config文件,ssh访问指定服务器
  15. Webgl开发输入框兼容问题及开发注意的问题
  16. css 鼠标划过 图片放大 实现
  17. 常见对称加密、解密、破解
  18. Luogu 3939 数颜色
  19. TypeError: only integer tensors of a single element can be converted to an indexValueError: only one
  20. 了不起的 Webpack HMR 学习指南(含源码分析)

热门文章

  1. python pip命令技巧
  2. Android 通过onTouchEvent判断是否为双击事件
  3. [FJOI2007]轮状病毒
  4. 关于动态门户WEB博雅互动的源代码(HTML+CSS+javascript)
  5. 20145228《Java程序设计》课程总结
  6. 病毒软件,导致DNS失效的解决办法
  7. 汇编中的word ptr
  8. 定义结构体的时候,里面的变量可以同时初始化吗?(不可以)
  9. POJ-1321-棋盘问题(深搜)
  10. Maven项目mybatis Invalid bound statement (not found)解决方法