quilksort v3.0版本,时间复杂度O(NlogN),基于荷兰国旗问题。

时间复杂度:随机选取一个数组内的数作为target,时间复杂度分析使用master公式(递归)。

JAVA代码:

import java.util.Arrays;public class quilksort {//quilksort,//基于荷兰国旗问题public static int[] partation(int[] arr,int L,int R,int target){int minindex = -1;int maxindex = arr.length;int index = L;while(index != maxindex){if(arr[index] < target){swap(arr,index,minindex + 1);minindex++;index++;}else if(arr[index] > target){swap(arr,index,maxindex - 1);maxindex--;}else{index++;}}return arr;}//quilksortpublic static void quilksort(int[] arr,int L,int R){if(L < R){int rand = L + (int)(Math.random() * (R - L + 1));swap(arr,rand,R);int[] t = partation2(arr,L,R);//左侧有序quilksort(arr, L, t[0]);//右侧有序quilksort(arr, t[1], R);}}public static int[] partation2(int[] arr,int L,int R){int minindex = L - 1;int maxindex = R + 1;int index = L;while(index != maxindex){if(arr[index] < arr[R]){swap(arr,index,minindex + 1);minindex++;index++;}else if(arr[index] > arr[R]){swap(arr,index,maxindex - 1);maxindex--;}else{index++;}}return new int[]{minindex,maxindex};}public static void swap(int[] arr,int i,int j){int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}public static void main(String[] args){int[] arr = {4,6,4,4,5,6,7,6,4,3,2,5,2};int target = 4;System.out.println("原数组" + Arrays.toString(arr));if(arr.length < 2){System.out.println(Arrays.toString(arr));}else{int L = 0;int R = arr.length - 1;arr = partation(arr,L,R,target);System.out.println(Arrays.toString(arr));}//quilksortif(arr.length < 2){System.out.println(Arrays.toString(arr));}else{int L = 0;int R = arr.length - 1;quilksort(arr, L, R);System.out.println(Arrays.toString(arr));}}}

荷兰国旗、quillksort相关推荐

  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. c++11 之模板定义别名(using)
  2. 解题报告(四)生成函数(ACM/ OI)
  3. Docker(七):Docker build 、Docker Dockerfile 详解
  4. android兼容小米xiaomi刘海屏解决方案
  5. 远程定位gps linux,GPS(NMEA)数据解析
  6. 静静守候属于我们的幸福。坚守我们的约定
  7. Network 之二 Ethernet(以太网)中的 MAC、MII、PHY 详解
  8. wxWidgets:wxWindowUpdateLocker类用法
  9. java addlast_Java中的LinkedList addLast()方法: java.util.LinkedList.addLast() - Break易站
  10. java 如何结束线程_java中,如何安全的结束一个正在运行的线程?
  11. 企业家“大战”初代网红:李彦宏、董明珠、罗永浩同时直播,谁更秀?
  12. ROS入门 TF与URDF
  13. corpus iweb_BYU-Corpus杨百翰大学英语语料系列数据库(BYU)
  14. html毕业答辩ppt,毕业答辩ppt
  15. 三极管开关为什么工作在饱和区和截至区
  16. A. One-dimensional Japanese Crossword
  17. 再见SNDA,在离职之后
  18. Mantle Introduce
  19. Word文档翻译成中文的方法
  20. python基础知识点集锦二

热门文章

  1. 利用存储过程分页显示查询数据
  2. 来看看科技公司们在今年的愚人节都开了什么玩笑
  3. opentp1如何连接oracle,Oracle用户安全管理
  4. 利用多 GPU 加速深度学习模型训练
  5. vue自定义组件三步走
  6. 计算机科学 hafu,不输加州!美国这个州的名校远比你想象的多!
  7. 【STM32学习笔记】(14)——独立看门狗(IWDG)详解
  8. android view.gone 动画,android – 如何动画View.setVisibility(GONE)
  9. 通过虚拟磁盘技术给电脑安装双系统或多系统
  10. Java开发学习的四个阶段