数据结构——八大排序(上)
数据结构中的八大排序算法是计算机科学领域经典的排序方法,它们各自具有不同的特点和适用场景。以下是这八大排序算法的详细介绍:
一、插入排序(Insertion Sort)
- 核心思想:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,再和前一个比较,直到全部元素都比较过。
- 时间复杂度:O(n^2),其中n是待排序元素的个数。在元素接近有序时,时间复杂度可以降低到O(n)。
- 空间复杂度:O(1),因为排序过程中只需要常量的额外空间。
- 稳定性:稳定,即相同元素在排序后的相对位置不变。
package 排序;import java.util.Arrays;public class Insert{//插入排序public static void main(String[] args) {int[] arr= {5,7,4,2,0,3,1,6};sort(arr);System.out.println(Arrays.toString(arr));}public static void sort(int[] arr) {for(int i=1;i<arr.length;i++) {for(int j=i-1;j>=0;j--) {if(arr[j]>arr[j+1]) {int temp =arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}else {break;}}}}
}
二、希尔排序(Shell Sort)
- 核心思想:希尔排序是插入排序的一种优化版本,也称为缩小增量排序。它先将数组分成若干子数组,每个子数组进行插入排序,然后逐渐缩小子数组的大小,直到整个数组有序。
- 时间复杂度:不固定,但通常在O(n2)之间,取决于gap的取值方法。
- 空间复杂度:O(1)。
- 稳定性:不稳定,因为相同元素可能在不同的子数组中进行排序,导致相对位置改变。
package 排序;import java.util.Arrays;public class Shell{//希尔排序(缩小增量)public static void main(String[] args) {int[] arr= {5,7,4,2,0,3,1,6};sort(arr);System.out.println(Arrays.toString(arr));}public static void sort(int[] arr) {for(int grep=arr.length/2;grep>0;grep=grep/2) { for(int i=grep;i<arr.length;i++) {for(int j=i-grep;j>=0;j=j-grep) {if(arr[j]>arr[j+grep]) {int temp =arr[j];arr[j]=arr[j+grep];arr[j+grep]=temp;}else {break;}}}}}
}
三、冒泡排序(Bubble Sort)
- 核心思想:相邻两个元素进行比较,如果前一个比后一个大,则交换它们的位置。这样,每一轮循环都会将一个最大的元素“冒泡”到数组的末尾。
- 时间复杂度:O(n^2),因为每一轮都需要遍历整个数组。
- 空间复杂度:O(1)。
- 稳定性:稳定,因为相同元素不会进行交换。
package 排序;import java.util.Arrays;public class Bubble{//冒泡public static void main(String[] args) {int[] arr= {5,6,71,25,31,42,36,9,4};sort(arr);System.out.println(Arrays.toString(arr));}public static void sort(int[] arr) {for(int j=0;j<arr.length;j++) {for(int i=0;i<arr.length-1;i++) {if(arr[i]>arr[i+1]) {int temp =arr[i];arr[i]=arr[i+1];arr[i+1]=temp;}}}}
}
四、快速排序(Quick Sort)
- 核心思想:选择一个元素作为基准(pivot),将数组分成两部分,一部分小于基准,一部分大于基准。然后递归地对这两部分进行排序。
- 时间复杂度:平均情况下为O(nlogn),但在最坏情况下(如数组已经有序)会蜕化为冒泡排序,时间复杂度为O(n^2)。不过,通过随机选择基准或三数取中法等方法可以降低最坏情况的发生概率。
- 空间复杂度:O(logn)(递归调用栈空间),但在最坏情况下会达到O(n)(当数组极度不平衡时)。
- 稳定性:不稳定,因为相同元素可能在不同的分区过程中被交换。
package 排序;import java.util.Arrays;public class Quick{//快速排序public static void main(String[] args) {int[] arr= {5,6,71,25,36,9,4};int left=0;int right=arr.length-1;sort(arr,left,right);System.out.println(Arrays.toString(arr));}private static void sort(int[] arr,int left,int right) {if(left>=right) {return;}int base=arr[left];int i=left;int j=right;while(i!=j) {while(arr[j]>=base&&i<j) {j--;}//i游标从前往后走找比基准数大的while(arr[i]<=base&&i<j) {i++;}//i和j进行交换int temp=arr[i];arr[i]=arr[j];arr[j]=temp;}//i和j相遇 基准数和相遇位置进行交换arr[left]=arr[i];arr[i]=base;//排序左边sort(arr,left,i-1);//排序右边sort(arr,i+1,right);}}
相关文章:
数据结构——八大排序(上)
数据结构中的八大排序算法是计算机科学领域经典的排序方法,它们各自具有不同的特点和适用场景。以下是这八大排序算法的详细介绍: 一、插入排序(Insertion Sort) 核心思想:将数组中的所有元素依次跟前面已经排好的元…...
vxe-table 导入导出功能全解析
一、vxe-table 导入导出功能概述 vxe-table 的导入导出功能在数据处理中具有至关重要的作用。在现代数据管理和处理的场景中,高效地导入和导出数据是提高工作效率的关键。 对于导入功能而言,它允许用户将外部的表格数据,如 Excel 文件&…...
常用STL的操作以及特点
C 标准模板库(STL)提供了很多常用的数据结构和算法,极大简化了开发工作。STL 包括容器(如 vector、list、map 等)、算法(如排序、查找等)以及迭代器。以下是一些常用 STL 容器的操作以及它们的特…...
025 elasticsearch索引管理-Java原生客户端
文章目录 pom.xml1创建索引2.创建索引并设置settings信息3.创建索引并设置mapping信息4.删除索引库5.给未设置mapping的索引设置mapping elasticsearch版本7.10.2,要求java客户端与之相匹配,推荐Springboot版本是2.3以上版本 依赖配置使用的是JUnit 5&am…...
Gin框架操作指南10:服务器与高级功能
官方文档地址(中文):https://gin-gonic.com/zh-cn/docs/ 注:本教程采用工作区机制,所以一个项目下载了Gin框架,其余项目就无需重复下载,想了解的读者可阅读第一节:Gin操作指南&#…...
AIGC技术的学习 系列一
文章目录 前言一、AIGC技术演进1.1 图像视频生成1.2. 文本生成1.3. 多模态生成1.4. 小结二、CAD&CAE软件介绍2.1. CAD软件2.2. CAE软件2.3. 小结三、AIGC技术与CAD&CAE软件的集成案例3.1. 土建设计领域3.2. 机械设计领域四、结语五、参考文献总结前言 在全球智能制造的…...
Milvus×Dify半小时轻松构建RAG系统
最近,检索增强生成(RAG)技术在AI界引起了广泛关注。作为一种将知识库与生成模型结合的新型架构,RAG大大提升了AI应用的实际表现。而在构建RAG系统时,Milvus作为业界领先的开源向量数据库,扮演着关键角色。本…...
wireshark 解密浏览器https数据包
一、导出浏览器证书有两种方法 1、在浏览器快捷方式追加启动参数: --ssl-key-log-file"d:\log\2.log" C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe --ssl-key-log-file"d:\log\2.log" 2、环境变量中新建用…...
【HTML】构建网页的基石
我的主页:2的n次方_ HTML 是一种超文本标记语言,不仅有文本,还能包含图片,音频等 1. HTML 的文件基本结构 html 标签是整个 html 文件的最顶层标签,head 标签中写页面的属性,body 标签是页面中显示的…...
rust不允许在全局区定义普通变量!
文章目录 C 中的全局变量Rust 中的全局变量设计哲学的体现 在 C 和 Rust 中,全局变量的处理方式体现了这两种语言设计哲学上的一些根本性差异: C 中的全局变量 C 允许在全局作用域中定义变量。这些变量在程序的整个生命周期内都存在,从程序开…...
量化投资中的数据驱动决策:大数据如何改变金融市场
随着科技的进步,金融行业迎来了前所未有的变革,量化投资作为其中的代表,逐渐成为投资市场的主流。量化投资是基于数学模型、数据分析以及算法策略的投资方式,与传统依赖经验和直觉的投资方法相比,它的核心优势在于能够…...
MySQL 设计数据表
一个数据表主要包含信息有 : 表名、主键、字段、数据类型、索引,本节主要介绍表的命名规范、字段命名、字段的数据类型选择。 新建的表都是新建在 “item_name” 数据库中的,新建 “item_name” 数据库命令如下 : CREATE DATABASE item_name;新建数据库…...
【大数据技术基础 | 实验一】配置SSH免密登录
文章目录 一、实验目的二、实验要求三、实验原理(一)大数据实验一体机(二)SSH免密认证 四、实验环境五、实验内容和步骤(一)搭建集群服务器(二)添加域名映射(三ÿ…...
地级市碳排放效率测算2006-2021年
为了测算碳排放效率,研究者们采用了多种方法,其中超效率SBM(Slack-Based Measure)和超效率CCR(Charnes, Cooper and Rhodes)模型是常用的两种方法。这些模型可以有效地评估决策单元的相对有效性,…...
周易解读:四象
四 象 在前面呢,我是讲完了太极与两仪的知识。这一节,我们来讲解四象的内容。 关于四象的知识,它在正式的周易的经文里面,它并没有多少用处。但是呢,在基础知识的学习里面,四象的知识,大家是…...
Java设计模式梳理:行为型模式(策略,观察者等)
行为型模式 行为型模式关注的是各个类之间的相互作用,将职责划分清楚,使得我们的代码更加地清晰。 策略模式 策略模式太常用了,所以把它放到最前面进行介绍。它比较简单,我就不废话,直接用代码说事吧。 下面设计的…...
【MySQL】入门篇—基本数据类型:使用LIMIT限制结果集
为了提高查询效率和用户体验,MySQL提供了LIMIT子句,用于限制查询结果的行数。LIMIT不仅可以提高性能,还可以帮助用户快速获取所需的数据,尤其在分页显示数据时非常有用。 应用场景: 分页显示:在网页应用中…...
PostgreSQL与MySQL在语法上的区别
PostgreSQL与MySQL在语法上的区别 在数据库管理系统中,PostgreSQL和MySQL都是非常受欢迎的选择。虽然它们都是一种关系型数据库管理系统(RDBMS),但它们在语法上有一些显著的区别。本文将介绍PostgreSQL和MySQL在语法上的主要区别。 数据类型 PostgreS…...
frameworks 之InputDispatcher
frameworks 之InputDispatcher 1. 填充Iq2.进入循环3.进入oq4. 发布消息,并将数据放进去wq5. 接收消息6. 移除wq android 输入事件 主要分 2个流程 事件读取 和 事件分发。本文讲解事件分发流程。 涉及到的类如下 -frameworks/native/services/inputflinger/Input…...
ESP32-IDF GPIO 专题
目录 一、基本介绍1、配置结构体2、API2.1 gpio_config2.2 gpio_reset_pin2.3 gpio_set_intr_type2.4 gpio_intr_enable2.5 gpio_intr_disable2.6 gpio_set_level2.7 gpio_get_level2.8 gpio_set_direction2.9 gpio_set_pull_mode2.10 gpio_isr_register2.11 gpio_install_isr_…...
从MATLAB到Python:脑网络连通性分析之PLI/wPLI的跨平台实现与结果对比
从MATLAB到Python:脑网络连通性分析之PLI/wPLI的跨平台实现与结果对比 神经科学研究中,脑网络连通性分析正成为理解认知功能与疾病机制的重要工具。其中,相位滞后指数(PLI)及其加权版本(wPLI)因…...
从4.69万亿Token看中国AI大模型:调用量超越美国的背后逻辑
前言最近看到一组数据:截至2026年3月15日,中国AI大模型的周调用量达到4.69万亿Token,连续第二周超越美国,全球前三全部被中国模型包揽。作为一个长期关注AI行业的技术人,这个消息让我想深入挖一挖背后的逻辑࿱…...
AI 创作者指南:06.AI 视频创作:脚本、镜头语言与自动化
第 6 篇|AI 视频创作:脚本、镜头语言与自动化 视觉DNA刚建好,你是不是已经开始用AI画封面、插图玩得停不下来了?😊 来,第二部分最后一篇——第6篇|AI 视频创作:脚本、镜头语言与自动化。 以前拍视频得找团队、剪半天,现在AI帮你从脚本到成片一键流水线。节奏和叙事才…...
2026年GPT-5.4实战应用完全指南
2026 年 3 月 OpenAI 发布的 GPT-5.4,是 AI 从对话工具转向自动化执行代理的里程碑产品,凭借原生计算机操控、百万 Token 上下文、Excel 深度集成、强推理编程四大核心突破,覆盖企业、专家、讲师、管理者、主播、电商、小白七类人群ÿ…...
CMW500实战指南:BLE射频关键指标测试与优化
1. CMW500与BLE测试基础入门 第一次接触CMW500进行BLE射频测试时,我被这个"黑盒子"复杂的按键界面吓到了。但实际用下来发现,只要掌握几个关键操作,就能快速完成BLE设备的核心指标验证。CMW500作为罗德与施瓦茨的旗舰级测试仪&…...
演员-评论家网络在ADP中的应用:如何构建和训练你的第一个模型
演员-评论家网络在自适应动态规划中的实战指南 当我们需要解决复杂控制问题时,传统动态规划方法往往面临"维度灾难"的困境。演员-评论家网络(Actor-Critic Network)作为自适应动态规划(ADP)的核心架构&#…...
SLAM算法评测神器evo:从安装到实战的完整避坑指南
SLAM算法评测神器evo:从安装到实战的完整避坑指南 在机器人定位与建图(SLAM)领域,算法性能评测是验证研究成果可靠性的关键环节。而evo作为一款轻量级、模块化的评测工具,凭借其强大的可视化能力和丰富的指标计算功能…...
PP-DocLayoutV3产业应用效果:金融票据与医疗报告的结构化
PP-DocLayoutV3产业应用效果:金融票据与医疗报告的结构化 每次看到财务同事抱着一沓厚厚的银行流水单手动录入数据,或者医生在成堆的化验单里翻找关键指标,我就在想,这事儿能不能让机器来干?过去,文档智能…...
PyCharm运行YOLOv8报错:onnx版本冲突的终极解决方案(附详细步骤)
PyCharm运行YOLOv8报错:onnx版本冲突的终极解决方案(附详细步骤) 当你在PyCharm中尝试将YOLOv8模型导出为ONNX格式时,突然弹出一条令人头疼的错误信息:module onnx has no attribute __version__。这就像在高速公路上…...
手把手教你用Simulink复现永磁同步电机无感控制:龙伯格+PLL观测器建模全流程(附模型)
永磁同步电机无感控制实战:从龙伯格观测器到PLL锁相环的Simulink全流程解析 在电机控制领域,永磁同步电机(PMSM)因其高效率、高功率密度等优势,已成为工业驱动和新能源应用的主流选择。而无位置传感器控制技术的突破&a…...
