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

Java实现快速排序算法

大家好,我是锋哥。今天分享关于【Java实现快速排序算法】面试题。希望对大家有帮助;

Java实现快速排序算法

超硬核AI学习资料,现在永久免费了!

下面是一个用 Java 实现的快速排序算法:

public class QuickSort {// 主方法public static void main(String[] args) {int[] arr = { 12, 7, 5, 14, 3, 8, 1, 9, 6, 11 };System.out.println("原数组:");printArray(arr);quickSort(arr, 0, arr.length - 1);System.out.println("排序后数组:");printArray(arr);}// 快速排序函数public static void quickSort(int[] arr, int low, int high) {if (low < high) {// 获取分区点int pivotIndex = partition(arr, low, high);// 对左右子数组递归排序quickSort(arr, low, pivotIndex - 1);quickSort(arr, pivotIndex + 1, high);}}// 分区函数,返回分区点的索引public static int partition(int[] arr, int low, int high) {// 选取最后一个元素作为基准元素int pivot = arr[high];int i = low - 1;  // i 是小于基准元素的元素的右边界// 遍历数组并进行交换for (int j = low; j < high; j++) {// 如果当前元素小于或等于基准元素,交换if (arr[j] <= pivot) {i++;swap(arr, i, j);}}// 最后将基准元素交换到正确的位置swap(arr, i + 1, high);return i + 1;}// 交换数组中的两个元素public static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}// 打印数组public static void printArray(int[] arr) {for (int num : arr) {System.out.print(num + " ");}System.out.println();}
}

说明:

  1. 快速排序的基本思路

    • 选择一个“基准”元素,将数组分为两部分,左边的元素比基准小,右边的元素比基准大。
    • 递归地对这两部分进行排序。
  2. partition():这个函数用来将数组按基准元素分区,并返回基准元素的最终位置。所有比基准小的元素会被放到基准的左边,所有比基准大的元素会被放到右边。

  3. quickSort():这是递归函数,负责处理数组的子数组。在每次递归中,partition() 会选出一个基准元素,并对左右子数组继续进行递归排序。

  4. swap():交换数组中的两个元素。

运行该程序后,你会看到原数组和排序后的数组。

http://www.xdnf.cn/news/18398.html

相关文章:

  • Jetson Xavier NX 与 NVIDIA RTX 4070 (12GB)
  • Kafka中zk的作用是什么
  • 【Java后端】【可直接落地的 Redis 分布式锁实现】
  • Linux设备模型交互机制详细分析
  • 突击复习清单(高频核心考点)
  • RORPCAP: retrieval-based objects and relations prompt for image captioning
  • STM32F103RC的USB上拉电阻1.5K
  • 回归测试的重要性与实践指南
  • 52 C++ 现代C++编程艺术1-禁止隐式转换关键字explicit
  • go语言中的select的用法和使用场景
  • Maven初识到应用
  • nginx-如何卸载和升级编译安装的版本
  • 第4课:布局与样式
  • RabbitMQ 应用问题
  • 产教融合助企业:国际数字影像产业园办全媒体人才培育会
  • K8S管理实战指南
  • 如何实现H5页面拉起原生App?
  • 学习:uniapp全栈微信小程序vue3后台(3)
  • SprintBoot 2 源码阅读
  • Thunderbird 将推出在德国托管的加密电子邮件服务
  • 浏览器插件优化工具:bypass paywalls chrome
  • 力扣热题之贪心算法
  • Python 办公自动化实战:Excel 批量处理 + 自动发邮件
  • VsCode 上的Opencv(C++)环境配置(Linux)
  • 51单片机-中断系统
  • Ansys Motor-CAD:概述(EMag、THERM、LAB、MECH)
  • 171-基于Flask的笔记本电脑数据可视化分析系统
  • Linux数字列排序命令
  • Apache Ozone 介绍与部署使用(最新版2.0.0)
  • 大数据毕业设计推荐:基于Hadoop+Spark的手机信息分析系统完整方案