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

面试算法:快速排序

题目

快速排序是一种非常高效的算法,从其名字可以看出这种排序算法最大的特点就是快。当表现良好时,快速排序的速度比其他主要对手(如归并排序)快2~3倍。

分析

快速排序的基本思想是分治法,排序过程如下:在输入数组中随机选取一个元素作为中间值(pivot),然后对数组进行分区(partition),使所有比中间值小的数据移到数组的左边,所有比中间值大的数据移到数组的右边。接下来对中间值左右两侧的子数组用相同的步骤排序,直到子数组中只有一个数字为止。

题目

public class Test {public static void main(String[] args) {int[] nums = {4, 1, 5, 3, 6, 2, 7, 8};int[] result = sortArray(nums);for (int item : result) {System.out.println(item);}}public static int[] sortArray(int[] nums) {quicksort(nums, 0, nums.length - 1);return nums;}public static void quicksort(int[] nums, int start, int end) {if (start < end) {int pivot = partition(nums, start, end);quicksort(nums, start, pivot - 1);quicksort(nums, pivot + 1, end);}}public static int partition(int[] nums, int start, int end) {int random = new Random().nextInt(end - start + 1) + start;swap(nums, random, end);int small = start - 1;// 把所有遇到的小元素全部放到头部for (int i = start; i < end; i++) {if (nums[i] < nums[end]) {small++;swap(nums, small, i);}}small++;swap(nums, small, end);return small;}private static void swap(int[] nums, int index1, int index2) {if (index1 != index2) {int temp = nums[index1];nums[index1] = nums[index2];nums[index2] = temp;}}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【AIGC-图片生成视频系列-4】DreamTuner:单张图像足以进行主题驱动生成
  • EST-100身份证社保卡签批屏按捺终端PC版web版本http协议接口文档,支持web网页开发对接使用
  • 制作一个可以离线安装的Visual Studio安装包
  • 【QT】qt各模块描述
  • windows2012 安装mysql5.7
  • AI-ChatGPTCopilot
  • 面试高频算法专题:数组的双指针思想及应用(算法村第三关白银挑战)
  • vue前端学习笔记
  • 【K8S 二进制部署】部署单Master Kurbernetes集群
  • Android ImageView的Bitmap在scaleType情况下Bitmap顶部与底部RectF坐标,Kotlin
  • Vite+Vue3学习笔记(2)——语法、渲染、事件、数据传递、生命周期、第三方库、前端部署
  • Python使用PyMySql增删改查Mysql数据库
  • shell 切片参数解释
  • BUUCTF Reverse/[2019红帽杯]Snake
  • 手拉手后端Springboot整合JWT
  • @jsonView过滤属性
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • avalon2.2的VM生成过程
  • create-react-app做的留言板
  • Docker 笔记(2):Dockerfile
  • Java深入 - 深入理解Java集合
  • JS基础之数据类型、对象、原型、原型链、继承
  • MYSQL 的 IF 函数
  • React 快速上手 - 07 前端路由 react-router
  • session共享问题解决方案
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Vue2 SSR 的优化之旅
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 基于axios的vue插件,让http请求更简单
  • 区块链技术特点之去中心化特性
  • 实现菜单下拉伸展折叠效果demo
  • 详解移动APP与web APP的区别
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 从如何停掉 Promise 链说起
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​字​节​一​面​
  • ‌JavaScript 数据类型转换
  • (1)(1.13) SiK无线电高级配置(六)
  • (160)时序收敛--->(10)时序收敛十
  • (HAL库版)freeRTOS移植STMF103
  • (ibm)Java 语言的 XPath API
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (七)Flink Watermark
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (顺序)容器的好伴侣 --- 容器适配器
  • (未解决)macOS matplotlib 中文是方框
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • *上位机的定义
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .Net IE10 _doPostBack 未定义