当前位置: 首页 > news >正文

排序数组(快速排序算法)

目录

一:题目链接

二:题目思路

区域划分:

递归执行:

三:代码实现


一:题目链接

二:题目思路

        这题主要由两大思路一起解决,一是 “区域划分” ,二是 “递归执行”,现在分别解释这两个思路。

区域划分:

        假设现有一个数组,我们在数组随机取一个基准值 key ,然后准备将数组从左到右划分为 < key ,== key, >key 三个区域,如图:

        所以,为了完成上图的情况,我们定义 left 下标在 -1,right 下标在 n(后面会解释)定义一个变量 i 用来遍历这个数组,变量 i 在遍历的过程中会将数组划分为四个区域:

        其中区域1为[0,left] ,区域2为 [left + 1,i -1] , 区域3为 [i , right - 1] , 区域4为  [right , n - 1],区域 1 和区域 2 代表 < key(将 == key 的情况包含了) ,区域 3 代表未遍历的,区域4代表 > key 。接下来 i 在遍历时会遇到的三种情况:

        当 nums[ i ] < key,此时交换 left + 1位置 和 i 位置下标的元素,后续 i++ , left++。

        当 nums[ i ] == key,直接 i++。

        当 nums[ i ] > key,此时交换 left + 1位置 和 i 位置下标的元素,后续 right--。(此时 i 位置得到的元素是未知的,所以不能 i++)

        现在就解释,所以为什么 left 下标在 -1,right 下标在 n,因为代码完成了交换元素前会进行 left + 1 或 left + 1,防止下标越界。

        这一思路总结代码就是:

        while(i < right) {if(nums[i] < key) {swap(nums,++left,i++);}else if(nums[i] == key) {i++;}else {swap(nums,--right,i);}}

         

递归执行:

        上述的区域划分只是完成了一次数组按照一个基准值来进行排序得到的三个区域,对划分后区域的子数组重复上述过程,当执行区域划分次数足够多时,就完成了快速排序。

三:代码实现

    public int[] sortArray(int[] nums) {qsort(nums,0,nums.length - 1);return nums;}public static void qsort(int[] nums,int l,int r) {//判断if(l >= r) {return;}//取基准值int key = nums[new Random().nextInt(r - l + 1) + l];//主逻辑int i = l;int left = l - 1;int right = r + 1;while(i < right) {if(nums[i] < key) {swap(nums,++left,i++);}else if(nums[i] == key) {i++;}else {swap(nums,--right,i);}}//继续分块操作qsort(nums,l,left);qsort(nums,right,r);}public static void swap(int[] nums,int a,int b) {int c = nums[a];nums[a] = nums[b];nums[b] = c;}
http://www.dtcms.com/a/533731.html

相关文章:

  • 安阳网站建设官网开发app的注意事项
  • 具身智能π0.5(pi0.5)模型在lerobot机械臂上复现
  • 成功的网站应该具备哪些要素wordpress恢复旧编辑器
  • 怎么做免费的网站商城以个人名义可以做网站吗
  • 网站开发总结性报告seo搜索优化是什么
  • 淄博手机网站营销型网站建设区别
  • 扬州有做义工的地方或网站嘛怎样设计电子商务网站的建设
  • 康复网站模板怎么做网站 组成
  • C语言的发展历史
  • 大数据和网站建设品牌餐饮加盟网站建设
  • 做企业规划的网站现在有专业做海鲜的网站没有
  • 【020】使用Google Test进行 C++ 单元测试:基于 CMake 和 FetchContent 的现代方法
  • 展开网站建设商城网站前台模板
  • 个人建站 wordpressuml电子商务网站建设文档
  • 做软件的网站phpwordpress防采集
  • 网站正在建设中 html 模板何做好网站建设销售
  • 数据库第三次项目实战
  • 合肥外贸网站建设公司排名网站建设项目实训报告
  • 免费网站的资源可以发公众号吗做产品表情的网站
  • Sdl窗口实现web view
  • 广东建设中标网站朝阳住房和城乡建设厅网站
  • dw做简易表格网站免费英文 网站模板
  • 微网站开发流程网页制作软件山水
  • 卢氏县网站建设推广深圳找做网站
  • dede模板蓝色大气简洁企业网站模板苏州哪家公司做网站
  • 【工业树莓派CM0 Dev Board】AI视觉应用部署方案:人脸检测
  • 网站建设报价单表格网站文章更新时间
  • 摄影网站源代码wordpress底部怎么改
  • 深圳设计功能网站免费搭建wordpress
  • 海南网站制作精准数据营销方案