数据结构排序

ops/2025/1/8 19:42:25/

文章目录

  • 排序
    • 插入排序
    • 折半插入排序
    • 希尔排序
    • 冒泡排序
    • 快速排序
    • 简单选择排序
    • 堆排序

https://i-blog.csdnimg.cn/blog_migrate/58966ddd9b29aabe8841f5ec34f0d31c.gif

🏡作者主页:点击!
🤖数据结构专栏:点击!
⏰️创作时间:2025年1月3日15点01分

在这里插入图片描述

排序

将各元素按关键字递增或递减顺序重新排列

评价指标:

  • 稳定性:关键字相同的元素经过排序后相对顺序是否会改变
  • 时间复杂度、空间复杂度

算法>排序算法分类:

  • 内部排序:数据都在内存中
  • 外部排序:数据太多,无法全部放入内存

插入排序

每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列中,直到全部记录插入完成

空间复杂度是O(1)

时间复杂度主要来自对比关键字、移动元素,若有n个元素,则需要 n-1 趟处理

最好时间复杂度(全部有序):On

最坏时间复杂度(全部逆序):On^2

平均时间复杂度:On^2

算法稳定性:稳定

折半插入排序

先使用折半查找找到应该插入的位置,再移动元素

比起直接插入排序,比较关键字的次数减少了,但是移动元素的次数没有变,整体来看时间复杂度依然是O(n^2)

希尔排序

最好情况:原本就有序

比较好的情况:基本有序

希尔排序:先追求表中元素部分有序,再逐渐逼近全局有序。设置增量,之后缩小增量的值

第一趟为 4 第二趟就为 2 第三趟为 1,每次乘以二分之一

一般只会让弄第一次排序的结果

时间复杂度:O(1)

稳定性:不稳定

适用性:仅适用于顺序表,不适用于链表

冒泡排序

冒泡排序和快速排序同属于交换排序

基于交换的排序,根据序列中两个元素关键字的比较结果来对这两个记录在序列中的位置

从后往前两两比较相邻元素的值,若为逆序,则交换它们,直到序列比较完。称这样的过程为一趟冒泡排序

第一趟排序使关键字值最小的一个元素冒到最前面

之后重复操作,第二趟第三趟 第四趟等等(每次排序都会有一个最小的关键字到前面)

前边已经确定最终位置的元素不用再进行对比

空间复杂度:O(1)

最好时间复杂度为:O(n)

最坏时间复杂度为:O(n^2)

平均时间复杂度为:O(n^2)

稳定性:稳定

适用性:顺序表、链表都可以

快速排序

冒泡排序和快速排序同属于交换排序

基于交换的排序:根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置

更小的元素都交换到左边

更大的元素都交换到右边

用第一个元素把待排序序列划分为两个部分,左边更小,右边更大。该元素的最终位置已确定

时间复杂度=O(n*递归层数)

最好时间复杂度=O(nlog2n)----每次选的枢纽元素都能将序列划分成均匀的两部分

最坏时间复杂度=O(n^2)----若序列原本就有序或逆序,则时、空复杂度最高

空间复杂度=O(递归层数)

最好空间复杂度=O(log2n)

最坏空间复杂度=O(n)

快速排序是所有内部算法>排序算法中平均性能最优的算法>排序算法

简单选择排序

每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列

n个元素的简单选择排序需要 n-1 趟处理

空间复杂度:O(1)

时间复杂度:O(n^2)

稳定性:不稳定

适用性:既可以用于顺序表,也可以用于链表

堆排序

每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列

大根堆:完全二叉树中,根>=左、右

小根堆:完全二叉树中,根=<左、右

思路:把所有非终端结点都检查一遍,是否满足大根堆的要求,如果不满足,则进行调整

堆排序:每一趟将堆顶元素加入有序子序列(与待排序序列中的最后一个元素交换)

并将待排序元素序列再次调整为大根堆(小元素不断下坠)

基于大根堆的堆排序得到递增序列

堆排序的时间复杂度:O(n)+O(nlog2n)=O(nlog2n)

堆排序的空间复杂度:O(1)

堆排序是不稳定的

Author:DC


http://www.ppmy.cn/ops/148245.html

相关文章

使用Python类库pandas操作Excel表格

Date: 2025.01.02 20:33:30 author: lijianzhan 简述&#xff1a;pandas 是处理 Excel 文件的强大工具&#xff0c;它提供了简单易用的接口来读取、操作和写入 Excel 数据。以下是使用 pandas 处理 Excel 文件的详细指南&#xff0c;包括常见操作和示例代码。 安装依赖,pandas …

WordPress Crypto插件前台任意用户登录漏洞复现(CVE-2024-9989)(附脚本)

0x01 产品描述: ‌WordPress Crypto插件是一种为WordPress网站提供加密货币支付、信息显示或交易功能的插件‌。这些插件通常与WordPress电子商务插件(如WooCommerce)集成,使网站能够接受多种加密货币支付,或展示加密货币实时信息。0x02 漏洞描述: WordPress 的 Crypto 插…

【深度学习-降维篇】t-SNE:让高维数据“看得见”的降维利器

文章目录 t-SNE:让高维数据“看得见”的降维利器1. 什么是 t-SNE?2. t-SNE 的核心原理3. t-SNE 的优缺点优点缺点4. t-SNE 使用中的常见问题与建议5. 与其他降维方法的对比6. t-SNE 的典型应用场景7. 总结8. 案例代码Python 代码示例代码运行结果代码解析更多建议与扩展9. 典…

Lua语言的字符串处理

Lua语言的字符串处理 引言 Lua是一种功能强大且灵活的脚本语言&#xff0c;广泛应用于游戏开发、嵌入式系统以及Web应用等多个领域。作为一种简洁的语言&#xff0c;Lua提供了丰富的字符串处理功能&#xff0c;使得开发者能够高效完成对文本的操作和管理。本文将深入探讨Lua中…

同步与并发:Java的同步舞蹈

现在&#xff0c;我们将深入探讨同步与并发&#xff0c;这是确保多线程程序正确性和效率的关键&#xff0c;就像是Java的同步舞蹈。 1 并发的概念 并发是指在多处理器系统中&#xff0c;多个操作或多个线程同时进行执行。在Java中&#xff0c;这意味着能够有效地利用多核处理…

聚焦“主动医学”新路径 助力科技与医疗深度融合

2024年12月21日至22日&#xff0c;由世界人工意识大会、世界人工意识协会、国际数据协会&#xff08;IDA&#xff09;、联合国世界丝路论坛数字经济研究院、国际院士专家联盟、中美硅谷发展促进会、中欧科学家论坛、AI人工智能国际研究院、欧洲中药中心等单位联合举办的第二届世…

【数理统计】4-估计模型参数

文章目录 一、前言二、极大似然估计 一、前言 在统计学中&#xff0c;估计模型参数的方法主要有以下几种&#xff1a; 极大似然估计&#xff08;Maximum Likelihood Estimation, MLE&#xff09;&#xff1a; 原理&#xff1a;通过找到使得观测数据的似然函数&#xff08;即样…

服务器迁移中心——“工作组迁移”使用指南

简介 服务器迁移中心&#xff08;Server Migration Center&#xff0c;简称SMC&#xff09;是阿里云提供给您的迁移平台。专注于提供能力普惠、体验一致、效率至上的迁移服务&#xff0c;满足您在阿里云的迁移需求。 工作组迁移是SMC的一项功能&#xff0c;提供标准化迁移流程…