快速排序算法

首先了解什么是哨兵排序,哨兵排序就是找到一个基准将整个数组按照基准分成前半段比基准小,后半段比基准大分成两组。之后将这两组分别继续递归执行哨兵排序,直到 l >= r 达到递归终点,完成排序。
具体的动画流程可以登陆:https://visualgo.net/zh/sorting网站查看。

import org.junit.Test;public class erfenPaixu {/*** 首先调用哨兵方法之后在使用递归的方法循环将基准左边部分和右边部分排序* ,直到达到递归出口l = r为止。* @param nums* @param l* @param r*/void erfen(int[] nums, int l, int r) {if (l >= r) return;int i = shaobing(nums, l, r);erfen(nums, l, i - 1);erfen(nums, i + 1, r);}/*** 利用哨兵划分将数组根据基准分为两半** @param nums* @param l 初始状态左边的索引* @param r 初始状态右边的索引* @return 返回一个i的边界值*/int shaobing(int[] nums, int l, int r) {//i 为 l的初始状态,j 为 r的初始状态int i = l;int j = r;while (i < j) {//i从左往右找大于基准的第一个数,j从右往左找小于基准的第一个数,把他俩交换//继续从当前位置的i,j继续循环查找,直到 i = j 将 i = j 所在位置与基准交换while (i < j && nums[j] >= nums[l]) j--;while (i < j && nums[i] <= nums[l]) i++;swap(nums, i, j);}swap(nums, i, l);return i;}/*** 交换数组中的元素** @param nums 数组* @param i* @param j*/public void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}@Testpublic void test() {int nums[] = {8, 2, 11, 9, 1, 5, 3};erfen(nums, 0, nums.length - 1);for (int i = 0; i < nums.length; i++) {System.out.print(nums[i] + ",");}}
}

感谢您的阅读,如果本篇文章对您有帮助,欢迎点赞,关注,您的阅读是我莫大的鼓励!

运用递归实现快速排序算法(二分排序)相关推荐

  1. 快速排序算法--升序排序

    首先,要了解快速排序的整个流程是如何进行的,才能逐渐理解此算法的效率相比其他算法的优势所在.接下来开始介绍排序的整个流程: 第一步,先把整个数组看做成一行棋格,这行积木的左右两边有两个哨兵(也就是后面 ...

  2. 十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  3. 快速排序算法的递归,迭代法实现(C++)

    tags: DSA C++ Sort Interview 思路 分治法 主要分成下面三个步骤: 选定基准值(默认是数组首元素), 这里称为pivot 找到基准值待放置的位置(排序之后的位置), 将大于 ...

  4. 快速排序: 使用快速排序算法对数组进行排序

    快速排序: 使用快速排序算法对数组进行排序 题目 一个数组有 N 个元素,使用快速排序对其进行排序输出(本题还会人工阅卷,请使用快速排序算法进行排序) 输入描述: 输入为两行. 第一行一个整数n(1 ...

  5. 【大话数据结构算法】快速排序算法

    快速排序是交换类的排序,比如在站队的时候,老师说:"第一个同学出列,其他同学以第一个同学为中心,比他矮的全排在左边,比他高的全排在右边."这就是一趟快速排序.可以看出,一趟快速排序 ...

  6. 数据结构与算法(三) 排序算法(代码示例)

    数据结构与算法三 排序算法 1. 选择排序 2. 插入排序 3. 冒泡排序 4. 归并排序 5. 快速排序 6. 希尔排序 7. 堆排序 总结 1. 选择排序 选择排序的基本原理: 对于未排序的一组记 ...

  7. 快速排序算法原理详解

    快速排序算法是冒泡排序算法的一种改进,采用"分而治之"的思想,把大的拆分成小的,再把小的拆分成更小的.如:对于一组待排的记录,通过一趟排序后,将原序列分成两部分,其中前一部分的所有 ...

  8. 基于平均值为枢轴的快速排序算法

    题目来源 这是我在2019年研究生入学考试中遇到的一道题目,之前我们所认识的快速排序无外乎是以第一个元素或中位数作为枢轴.但是使用的第一个元素作为枢轴存在一个问题,我在接下来的分析中将进行阐述.但是各 ...

  9. C语言随机生成成绩排序,如何实现以下功能给出1000个通过随机数生成的数据,分别用直接插入排序法、冒泡排序法、快速排序法进行排序...

    已结贴√ 问题点数:20 回复次数:2 如何实现以下功能给出1000个通过随机数生成的数据,分别用直接插入排序法.冒泡排序法.快速排序法进行排序 #include #include #include ...

  10. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

最新文章

  1. Linux记录-普通用户下执行sudo xxx 找不到命令解决方案
  2. C语言程序的内存分配方式
  3. php的cms是什么意思,phpcms是什么系统
  4. android初学之sharedpreferences存储
  5. 计算与推断思维 十二、为什么均值重要
  6. ❤️力扣线性枚举算法第二题数组中连续为一的最大个数
  7. 日常学习笔记-RGB配色和颜色转换
  8. 如何刷原生android系统版本,小米手机1原生Android4.1系统刷机教程
  9. PCIe数据卡设计资料第611篇:基于VU9P的双路5Gsps AD 双路6Gsps DA PCIe数据卡
  10. 短视频、移动AI……你关注的热点移动开发技术都在这
  11. Win10解决:系统管理员已阻止你运行此应用
  12. [百家号]铁流:华为Hi1620发布 自研内核还是ARM改?
  13. python for finance pdf_python金融大数据分析 pdf
  14. 【JavaIO流之实战演练】
  15. 明日直播:如何在RT-Thread上使用TFLite Micro实现AI相机?
  16. CVPR 2018 | 8篇论文、10+Demo、双项挑战赛冠军,旷视科技掀起CVPR产学研交流热潮
  17. Android获取当前位置(GPS和网络定位)
  18. 去中心化区块链预言机
  19. 计算机网络员考试试题及答案,2013年软考网络管理员考前测试题及答案(10)
  20. 小米网络信号测试软件,小米11信号怎么样_小米11信号测试

热门文章

  1. 第五次网页前端培训(JS的基本使用)
  2. 文档管理专家Aspose 2017年首季更新大合集
  3. 华为Q22机顶盒,刷机固件及教程(当贝桌面)
  4. 2017年最优秀的七大开源网络监控工具
  5. java学生管理系统论文_(定稿)毕业论文基于java的学生信息管理系统设计报告(完整版)最新版...
  6. MTK 驱动 Kernel-3.18中如何配置和使用spi
  7. 通常学校计算机实验室中的网络属于,增霸卡在学校计算机实验室维护中的应用研究...
  8. 自学-Linux-老男孩Linux77期-day2
  9. 数字盲打怎么练_键盘上的数字键怎么练才能盲打?
  10. Quartus II13.1 simulate13.1 详细安装教学