题目

使用随机快排对给定数组进行从小到大排序
[5,3,2,1,5] ⇒ [1,2,3,5,5]

解析

给定一个数组

1.在数组中找出一个数作为基准(最右侧的数2);变量l记录数组头位置,变量r记录尾位置

2.从l位置开始找到大于基准数的位置。l位置元素与基准数比较,3>2,3和r位置数据交换,r减1

3.从r位置开始找到小于基准数的位置。r位置元素与基准数比较,7>2,r减1;5>2,r减1;1<2,1和l位置数据交换,l加1;

4.重复步骤2,l>=r时停止,此时数字l或r位置为基准数,基准数左面的数小于基准数,基准数右面的数大于或等于基准数,

5.这个处理完的数组分成三部分,基准数,基准数左面的数,基准数右面的数
基准数左面的数作为单独的数组,基准数右面的数作为单独的数组,这两个数组重复步骤1,即可完成排序

随机快排:这个基准数在数组随机位置获取,即为随机快排

代码

public static void quickSort(int[] arr) {if (arr == null || arr.length < 2) {return;}process(arr, 0, arr.length - 1);
}private static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;
}private static int partition(int[] arr, int L, int R) {if (L > R) {return -1;}if (L == R) {return L;}int lessEqual = L - 1;int index = L;while (index < R) {if (arr[index] <= arr[R]) {swap(arr, index, ++lessEqual);}index++;}swap(arr, ++lessEqual, R);return lessEqual;
}private static void process(int[] arr, int L, int R) {if (L >= R) {return;}int M = partition(arr, L, R);process(arr, L, M - 1);process(arr, M + 1, R);
}

有苦有乐的算法 --- 随机快排相关推荐

  1. 多图养眼!Partition,荷兰国旗问题与随机快排

    快速排序的思想是通过一次排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归方式实现,以此达到整 ...

  2. 【数据结构与算法】快排、归并 O(nlogn) 基于比较

    冒泡.插入.选择 O(n^2) 基于比较 快排.归并 O(nlogn) 基于比较 计数.基数.桶 O(n) 不基于比较 一.分治思想 1.分治思想:分治,顾明思意,就是分而治之,将一个大问题分解成小的 ...

  3. 【好记性不如烂笔头】快速排序(三)非递归实现随机快排

    快速排序(三)非递归实现随机快排 前言

  4. 【数据结构的魅力】003.算法归并与随机快排

    归并排序的实现 1)递归方法实现 2)非递归方法实现 快速排序 Partition过程 实现思路: 给定一个num,划定一个<=区,初始坐标为-1 如果[i]==num,i++ 如果[i]< ...

  5. 【数据结构算法】快排/归并/堆排序 c++

    一个用来了解数据结构算法(各种排序,列表,树等)很友好的网站: https://visualgo.net/en 该题目来自于牛客:算法篇-排序问题 快排(必备)+归并(体会分治)+堆(自己建堆) // ...

  6. python算法题排序_python-数据结构与算法- 面试常考排序算法题-快排-冒泡-堆排-二分-选择等...

    算法可视化网站推荐---->visualgo 0.面试题中的排序算法 一些排序算法可能在工作中用的会比较少,但是面试却是不得不面对的问题.算法有助于提高我们对数据结构的理解以及提高自己的逻辑能力 ...

  7. 快排算法 java_快排算法的实现与讲解(java/C++)

    快排的算法其实不复杂,但是很少时候,偶尔整的自己头晕,所以写一篇博客,以免以后忘记. 假设我们的数组为:{5,2,1,8,9,3,7,0,4,6},一共10个数字,现在需要将这个数组进行排序.首先我们 ...

  8. 快速选择算法-基于快排

    目录 快速选择算法 例题 算法思路 代码实现 快速选择算法 快速选择,就是在一个无需的数组中查找第k个小的数.我们可以很快的想到可以先将数组排序在进行选择,但时间复杂度为O(nlog⁡n)O(n\lo ...

  9. 算法——java快排(快速排序)

    手写java快排(快速排序)代码--双边循环法,本人亲测哈哈!! package com.abc.backend.algo;import java.util.Arrays;/*** 快排(双边循环法) ...

最新文章

  1. 朴素贝叶斯算法应用实例
  2. elasticsearch入门一
  3. 图解WebSphere 8.5 安装
  4. mysql 拼音查询_mysql实现用拼音搜索中文的数据库实现
  5. c语言函数的形参有几个,C中子函数最多有几个形参
  6. linux 64 32 编译支持,在64位linux上编译32位程序 for i386 intel
  7. MFC1、动态创建CButton
  8. 还在直接操作Redis?赶快来试试它....
  9. libcurl post数据
  10. 设计模式之十五:訪问者模式(Visitor Pattern)
  11. 解决Vscode编辑器不能打开多标签页问题
  12. MCU串行通讯和并行通讯的区别以及UART的理解
  13. 隐秘?混乱?商业化?记者深入总部,探寻OpenAI“拯救世界”背后的真相
  14. 最新Axure激活码
  15. gcc -Wall -pedantic -ansi(转载)
  16. LabVIEW图表之双坐标轴
  17. 四方光电扬尘传感器PM3006助力打赢蓝天保卫战
  18. OpenCV各个平台SDK下载
  19. 切比雪夫1型滤波器C语言,切比雪夫1型滤波器.doc
  20. rtos中的喂狗思路——freertos

热门文章

  1. 尼康相机照片怎么恢复
  2. 信息系统项目管理师(2022年)—— 重点内容:项目人力资源管理(9)
  3. 2022-2028全球与中国实验室烧结炉市场现状及未来发展趋势
  4. 淘宝、百度、腾讯、新浪开放平台
  5. 试题 历届真题 全球变暖【第九届】【省赛】【B组】2018年 第9届 蓝桥杯 Java
  6. P6-Windows与网络基础-安装eNSP软件环境
  7. 域名——host配置
  8. 高性能mysql学习笔记--索引
  9. 搭建Vue3脚手架和使用
  10. 2021-2027全球与中国健身俱乐部和健身房管理软件市场现状及未来发展趋势