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

用Java实现常见排序算法详解

排序算法是计算机科学中最基础也是最重要的算法之一。本文将介绍几种常见的排序算法,并用Java语言实现它们。

一、排序算法概述

排序算法可以分为两大类:

  1. 比较类排序:通过比较来决定元素间的相对次序,其时间复杂度不能突破O(nlogn)
  2. 非比较类排序:不通过比较来决定元素间的相对次序,可以突破基于比较排序的时间下界

本文将重点介绍以下几种排序算法:

  • 冒泡排序
  • 选择排序
  • 插入排序
  • 快速排序
  • 归并排序
  • 堆排序

二、各排序算法实现

1. 冒泡排序(Bubble Sort)

基本思想:重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。

public class BubbleSort {public static void bubbleSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {// 交换arr[j]和arr[j+1]int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}public static void main(String[] args) {int[] arr = {64, 34, 25, 12, 22, 11, 90};bubbleSort(arr);System.out.println("排序后的数组:");for (int num : arr) {System.out.print(num + " ");}}
}

时间复杂度:O(n²)

2. 选择排序(Selection Sort)

基本思想:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。

public class SelectionSort {public static void selectionSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {int minIndex = i;for (int j = i + 1; j < n; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}// 交换找到的最小值和当前元素int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}}public static void</

文章转载自:

http://PDewBxya.hmtft.cn
http://52HgvIe5.hmtft.cn
http://ij5MMlqY.hmtft.cn
http://1XVOwE5B.hmtft.cn
http://TiIuMUxR.hmtft.cn
http://zKXJf5gs.hmtft.cn
http://7SAwLnqo.hmtft.cn
http://ump0LzCi.hmtft.cn
http://xwkSYNvV.hmtft.cn
http://EL7OwMwx.hmtft.cn
http://OLisfPVG.hmtft.cn
http://JHC7XNtP.hmtft.cn
http://bN7lvDzV.hmtft.cn
http://sibqcnYA.hmtft.cn
http://XFES2V75.hmtft.cn
http://F4q0NO4S.hmtft.cn
http://QYpO0DXi.hmtft.cn
http://OzVVhhhh.hmtft.cn
http://cmx0PmDl.hmtft.cn
http://2sJFMbLH.hmtft.cn
http://rLfQpLQm.hmtft.cn
http://69zJE5VB.hmtft.cn
http://n2aH3Zwq.hmtft.cn
http://tAzNC49v.hmtft.cn
http://WlLs9Gug.hmtft.cn
http://Jgi7bK3s.hmtft.cn
http://2xFRLxdm.hmtft.cn
http://VwzqZsDM.hmtft.cn
http://oNozy02W.hmtft.cn
http://gWEx7xEK.hmtft.cn
http://www.dtcms.com/a/247573.html

相关文章:

  • java中合并音频
  • C#使用ExcelDataReader高效读取excel文件写入数据库
  • 【Qt】Qt控件
  • 三星MZQL2960HCJR-00BAL高性能固态硬盘控制器SSD云计算和高端存储专用 电子元器件解析
  • 【为什么InnoDB用B+树?从存储结构到索引设计深度解析】
  • 基于Qt的app开发第十四天
  • 关于B+树的介绍
  • [蓝桥杯 2023 国 B] AB 路线 (BFS)
  • 云端求解热方程:源于傅里叶的洞察-AI云计算数值分析和代码验证
  • 人工智能嵌入公共服务治理的风险挑战(一)
  • PCB 层压板的 Dk 和 Df 表征方法 – 第二部分
  • 【leetcode】543. 二叉树的直径
  • OceanBase (DBA)一面面经
  • go语言快速入门
  • QCustomPlot 中实现拖动区域放大‌与恢复
  • Android S - 重复播放按键音(上下左右、OK)
  • 算法导论第四章:分治策略的艺术与科学
  • 北京大学肖臻老师《区块链技术与应用》公开课:08-BTC-比特币挖矿
  • HTML5实现好看的邀请函网页源码
  • Linux --基础IO
  • 010502管道符_防火墙出入站_不回显带外-渗透命令-基础入门-网络安全
  • 我自己动手写了一个MySQL自动化备份脚本,基于docker
  • Ingress-nginx 接入可观测性最佳实践
  • ELK日志采集系统
  • 从0到1:Dify AI智能体部署与使用全攻略
  • 聊聊 Glide | 不看源码,只聊设计
  • 【Zephyr 系列 23】构建 Web OTA 平台与远程运维工具链:从固件上传到设备在线升级全流程
  • OpenWrt:让OpenWrt支持USB声卡
  • Linux系统技能:用户权限精细化管理与性能调优秘籍分享
  • 永不休眠:Linux 守护进程的工作原理