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

东营市做网站的公司seo的培训班

东营市做网站的公司,seo的培训班,贵阳建设公司网站,如何做网站宣传🎗️ 主页:小夜时雨 🎗️专栏:快速排序 🎗️如何活着,是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/sort-an-array/ 我们上道题讲过快速排序的核心代码&a…

🎗️ 主页:小夜时雨
🎗️专栏:快速排序
🎗️如何活着,是我找寻的方向

优雅

目录

  • 1. 题目解析
  • 2. 代码

1. 题目解析

题目链接: https://leetcode.cn/problems/sort-an-array/

在这里插入图片描述

我们上道题讲过快速排序的核心代码,建议先看一下这道题:颜色分类 https://leetcode.cn/problems/sort-colors/description/

快速排序的核心代码区间就是数组分三块, 所以还是十分重要的, 接下来我们再来分析一下分块这个过程:

  • i 作为基准 key , 用三个变量分别标记, i 标记遍历原数组的位置, left 标记 0 区域的最右边位置, right 标记右边 2 区域最左边的位置.
  • i 遍历数组, nums[i] < key 时, 交换 left + 1 和 i 位置的值, i++;
  • 碰见 == key 的, 直接 i++;
  • nums[i] > key 时, 交换 right - 1 和 i 位置的值, 此时注意没有 i++, 仍要进行判断 i 位置的值(详情看颜色分类这道题: https://leetcode.cn/problems/sort-colors/description/

接下来我们来说一下快速排序的实现过程

快速排序具体实现过程:

  1. 首先我们先确定一个 key,作为基准进行比较.
  2. 三个变量进行标记, 分别是 i 标记原数组遍历的位置, left 标记 < key 区域的最右边位置, right 标记 > key 区域的最左边位置.
  3. i 遍历原数组, nums[i] < key 时, 交换 left + 1 和 i 位置的值, 之后 i++, left++;
  4. nums[i] == key 时, i++, 不做任何交换
  5. nums[i] > key 时, 交换 right - 1 和 i 位置的值, 之后 right - 1, 注意 i 不变
  6. 这个之后把数组分成了三块, 中间一块都是等于 key 的不用处理, 之后递归处理左边区域和右边区域, 也都是同样的处理方式, 就是递归. (看后续的代码更容易理解).

看下面的分析图可能会更容易理解:

在这里插入图片描述

  • 关于 key 的选择, 我们用随机的方式选择基准元素最好, 分三块的思想当全部元素都一样的时候, 此时只需遍历一遍就可以排好数组了.

在这里插入图片描述

  • 也就是说我们想让整体有序,先把数组分为三块, 左边是小于 key 的区域, 中间是等于 key 的区域, 右边是大于 key 的区域. 这样是一个大致有序的数组了
  • 以左区间为例:得先让左区间进行有序,让左区间有序就得让左区间进行划分, 分成三块, 之后左边区间又逐渐有序了.
  • 就这样一直划分下去,直到划分不了区间就是有序了, 那么这个时候左边区间就是已经排好序了, 右边区间同理.
  • 我们发现这个过程其实有点像是二叉树的前序遍历, 前让中间区域有序(类比是根节点), 之后再是左区间, 右区间有序.
  • 归并排序有点像是二叉树的后序遍历,左右区间有序之后(类比先遍历左右子树),合并之后整体才会有序(遍历根节点)。

2. 代码

看下面的代码对照着上面的流程解析可能会更加的清楚。

	// 快速排序public int[] sortArray3(int[] nums) {int n = nums.length;// 传入下标qsort(nums, 0, n - 1);return nums;}    /*** l, r 表示下标, 要排序的下标* * @param nums* @param l* @param r*/private void qsort(int[] nums, int l, int r) {// 循环终止条件if(l >= r) return;// 数组分三块, 不是从 0 开始, 因为要划分好多次// left 表示小于 key 的最右侧, right 表示大于 key 的最左侧int left = l - 1, right = r + 1, i = l;// 随机生成 key, 注意这个位置, nextInt(r - l + 1) + l 别忘了加 lint key = nums[new Random().nextInt(r - l + 1) + l];// 数组分三块, 核心代码while(i < right) {if(nums[i] < key) swap(nums, i++, ++left);else if (nums[i] == key) i++;else swap(nums, i, --right);}// 分完之后, 再分左侧的和右侧的qsort(nums, l, left);qsort(nums, right, r);}private void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}

归并排序: https://blog.csdn.net/Jin__Wang/article/details/139811604

🎗️🎗️🎗️ 好啦,到这里有关本题的分享就没了,如果感觉做的还不错的话可以点个赞,关注一下,你的支持就是我继续下去的动力,我们下期再见,拜了个拜~ ☆*: .。. o(≧▽≦)o .。.:*☆

http://www.ds6.com.cn/news/60432.html

相关文章:

  • 北京旅游网站建设公司网站设计
  • 设计模板网站都有哪些在线工具网站
  • 快速排名优化系统seo顾问咨询
  • WordPress博客自动更新文章宁波网站推广优化公司怎么样
  • 北京上海网站建设公司搜索引擎营销成功案例
  • 柳州正规网站制作公司搜索 引擎优化
  • 北京网站建设类岗位软文范文
  • 编程 毕业设计代做网站东莞网站建设工作
  • 网站项目建设流程图电商培训课程
  • 免费购物网站制作如何进行网络推广营销
  • 国内网站建设代理seo是搜索引擎优化吗
  • 网站开发技术 文库杭州百度推广开户
  • 合肥品牌网站建设广告策划方案范文
  • 做网站的费用怎么录分录网络营销推广方式案例
  • 做日本贸易哪个网站好百度推广投诉电话客服24小时
  • 包装材料东莞网站建设旅游seo整站优化
  • 国外超酷设计网站网络营销pdf
  • 昆明做网站做的好的公司公司网站开发费用
  • 类似千图网的素材网站推广平台收费标准
  • wordpress添加签名郑州seo优化顾问阿亮
  • 中企动力做的网站好吗专业网站制作
  • 做旅游业务的商业网站宁德市市长
  • 宁国新站seo最近几天发生的新闻大事
  • 温州做网站公司哪家好新东方考研培训机构官网
  • wordpress弹窗登入重庆seo招聘
  • 进行网站建设视频cps游戏推广平台
  • wordpress刷新seo网站设计工具
  • 企业网站优化的弊端深圳疫情最新消息
  • 做品牌网站的商业软文怎么写
  • 从零学建设网站广州最新消息今天