八大排序--快速排序、希尔排序、冒泡排序、归并排序、堆排序等经典排序算法思想

news2024/11/16 17:51:18

目录

排序的分类

基本概念

插入排序

直接插入排序

折半插入排序

希尔排序

交换排序

冒泡排序

快速排序

选择排序

简单选择排序

堆排序

二路归并排序

基数排序

选择算法需要考虑的因素


排序的分类

其中比较重要的已做标记,下面来简要介绍一下

基本概念

排序的定义:对一个数据元素集合或序列重新排列成一个按数据元素某项值有序的序列

稳定性:相同关键码元素间的位置关系,排序前后保持一致则稳定,不一致的不稳定

插入排序

  • 直接插入排序

    • 从前(第二个关键字)往后遍历,依次插入到前面已经排好序的子序列当中

    • 时复:o(n^2) 空复:o(1) 稳定 适用:顺序和链式

    • 图示

  • 折半插入排序

    • 利用折半查找来寻找待插元素的插入位置

    • 时复:o(n^2) 空复:o(1) 稳定 适用:顺序

  • 希尔排序

    • 缩小增量排序,把关键字隔一定的大小分组,最终序列基本有序,再进行一次直接插入排序

    • 时最坏:o(n^2) 空:o(1) 不稳定 适用:顺序

    • 图示

交换排序

  • 冒泡排序

    • 像吐泡泡一样逐渐得到最大(或最小)的关键字。两两比较,若逆序则交换

    • 时复:o(n^2) 空复:o(1) 稳定 适用:顺序和链式

    • 图示

  • 快速排序

    • 基于分治思想,每次选择第一个元素为基准元素,比基准元素大的放一边,小的放一边,最终有序。代码中有递归,需要借助递归栈

    • 时复:o(n^2) 空复:最坏o(n^2),最好o(log n) 不稳定 适用:顺序

    • 图示

选择排序

  • 简单选择排序

    • 每一趟确定一个最小(或最大)的元素,放到最终位置处(与该处元素交换)

    • 时复:o(n^2) 空复:o(1) 不稳定 适用:顺序和链式和关键字较少的情况

  • 堆排序

    • 建堆(大根or小根),堆是一个完全二叉树形式,每次在根节点处会得到最大(或最小)的元素,与最后一个叶节点交换,重新整理堆,以此类推

    • 时复:o(n log n) 建堆时间:o(n) 空复:o(1) 不稳定 适用:顺序和链式

    • 图示(详细讲解)

二路归并排序

  • 将两个或两个以上的有序表合并成一个新的有序表,有序表中从头到尾进行比较。先是每两个元素合并,再是四个元素合并,以此类推

  • 每次归并时需要把表复制一遍,每趟归并时间复杂度为o(n),需要进行(log n)次归并

  • 时复:o(n log n) 空复:o(n) 稳定 适用:顺序和链式

  • 图示

基数排序

  • 从个位开始,依次往前进行排序(也就是优先度越高的越晚排序),需要借助队列来存储每次按位排序的链表

  • 时间复杂度解释:需要进行d趟位(关键字不同则d不同)排序,一趟遍历所有关键字,时间复杂度O(n),一趟需要合并r个队列

  • 时复:O(d(n+r)) 空复:o(r) 稳定 适用:顺序和链式

选择算法需要考虑的因素

  • 待排序的元素个数n

  • 待排序的元素的初始状态

  • 关键字的结构及分布情况

  • 稳定性的要求

  • 存储结构及辅助空间的大小限制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】任推邦近30日推广数据采集+推送

不知道任推邦是啥的,可以查看之前的文章:夸克网盘扩容N次20T的方法 本文主要是针对夸克网盘的,其他项目有的没有提供接口,如果有也自行抓包,参考修改一下就行了。主要是将接口返回内容以html表格形式进行推送&#xf…

数据结构-二叉树(java实现)及相关的oj题

文章目录 树树的定义:关于树的相关概念:树的实际实现形式(表现形式)树的应用 二叉树二叉树的概念特殊的二叉树二叉树的性质:二叉树的存储实现:二叉树的模拟实现:实现的成员方法与属性&#xff1…

CSS3中动画的制作案例

直接上代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>-webkit-keyframes expand {0% {border-width: 4px;}50% {border-width: 12px;}100% {border-width: 4px;height: 130px;width: 15…

C#对象和类型

属性、方法、字段 字段和属性的区别 在C#中&#xff0c;字段&#xff08;fields&#xff09;和属性&#xff08;properties&#xff09;都是类的成员&#xff0c;它们提供了类存储数据的方式&#xff0c;但它们在用途和功能上有着明显的区别。 字段 字段通常用来存储类…

组合优化与凸优化相关算法 Julia实现

线性规划 方法有单纯形法&#xff08;简单&#xff0c;非多项式&#xff09;&#xff0c;椭圆法&#xff08;复杂&#xff0c;多项式&#xff0c;仅有理论价值&#xff09;&#xff0c;内点法&#xff08;非多项式&#xff0c;实际效率高&#xff09;。 以例子说明&#xff0…

C++第五篇 类和对象(下) 初始化列表

目录 1.再探构造函数 2.类型转换 3.static成员 4.友元 friiend 1.再探构造函数 (1).之前我们实现构造函数时&#xff0c;初始化成员变量主要使用函数体内赋值&#xff0c;构造函数初始化还有一种方式&#xff0c;就是初始化列表&#xff0c;初始化列表的使用方式是以一个冒…

[Spring] SpringBoot统一功能处理与图书管理系统

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

分销商城小程序系统如何开发

uni-app框架&#xff1a;使用Vue.js开发跨平台应用的前端框架&#xff0c;编写一套代码&#xff0c;可编译到Android、小程序等平台。 框架支持:springboot/Ssm/thinkphp/django/flask/express均支持 前端开发:vue.js 可选语言&#xff1a;pythonjavanode.jsphp均支…

EDI是什么:EDI系统功能介绍

EDI全称Electronic Data Interchange&#xff0c;也被称为“无纸化贸易”。EDI实现企业间&#xff08;B2B&#xff09;自动化通信&#xff0c;帮助贸易伙伴和组织完成更多的工作、加快物流时间并消除人为错误。 EDI遵从国际报文标准&#xff0c;使得业务数据按照结构化或是标准…

音频文件怎么转换成mp3?这5种方法快速转换

音频文件格式繁多&#xff0c;从WAV到FLAC&#xff0c;从AAC到OGG&#xff0c;每一种都有其独特的优势和应用场景。但当我们需要将音频文件分享给朋友、上传到网络平台或进行跨设备播放时&#xff0c;MP3格式因其广泛的兼容性和较小的文件体积&#xff0c;往往成为首选。给大家…

「字符串」实现Trie(字典树|前缀树)的功能 / 手撕数据结构(C++)

概述 在浏览器搜索栏里输入几个字&#xff0c;就弹出了以你的输入为开头的一系列句子。浏览器是怎么知道你接下来要输什么的&#xff1f; 来看看字典树干了什么。 字典树是一种高效记录字符串和查找字符串的数据结构。它以每个字符作为一个节点对字符串进行分割记录&#xff0c…

48 集合应用案例

编写代码时除了要准确地实现功能之外&#xff0c;还要考虑代码的优化&#xff0c;尽量找到一种更快、更好的方法实现预定功能。Python 字典和集合都使用哈希表来存储元素&#xff0c;元素查找速度非常快&#xff0c;关键字 in 作用于字典和集合时比作用于列表要快得多。 impor…

【数据结构之单链表的实现(不带头)】

1.单链表 1.1概念与结构 链表是一种物理存储结构上非连续&#xff0c;非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针连接次序实现的。 可以用下图便于理解 节&#xff08;结&#xff09;点&#xff1a; 与顺序表不同的是&#xff0c;链表里面的每节“车…

三十种未授权访问漏洞合集

未授权访问漏洞介绍 未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷&#xff0c;导致其他用户可以直接访问&#xff0c;从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历 目前主要存在未授权访问漏洞的有:NFS服务&a…

百度飞桨 OCR识别

百度飞桨 OCR识别代码 import warnings import time import cv2 as cv import paddlehub as hub # Load the image img cv.imread("1.jpg") height, width, channels img.shape imglist [img] ocr hub.Module(name"ch_pp-ocrv3", enable_mkldnnTrue) …

从Axure入门,开始了解产品

​不少想要求职产品经理的小伙伴在问一个问题&#xff1a;我是一个纯小白&#xff0c;一点基础都没有&#xff0c;我该如何入门产品呢&#xff1f;当然想要入门产品&#xff0c;很多人都有自己的一套方法&#xff0c;这里推荐其中的一种方法&#xff0c;从原型工具&#xff0c;…

ModuleNotFoundError: No Module Named openai

题意&#xff1a;Python 无法在环境中找到名为 openai 的模块 问题背景&#xff1a; import requests from bs4 import BeautifulSoup import openai #write each line of nuclear.txt to a list with open(nuclear.txt, r) as f:lines f.readlines()#remove the newline cha…

Spring源码-ClassPathXmlApplicationContext的refresh()都做了什么?

AbstractApplicationContext的refresh方法 /*** 用给定的父类创建一个新的ClassPathXmlApplicationContext* Create a new ClassPathXmlApplicationContext with the given parent,* 从给定的XML文件加载定义* loading the definitions from the given XML files.* param confi…

UE5 从零开始制作跟随的大鹅

文章目录 二、绑定骨骼三、创建 ControlRig四、创建动画五、创建动画蓝图六、自动寻路七、生成 goose八、碰撞 和 Physics Asset缺点 # 一、下载模型 首先我们需要下载一个静态网格体&#xff0c;这里我们可以从 Sketchfab 中下载&#xff1a;Goose Low Poly - Download Free …

十条线路:畅享张北草原天路玩法

2024年6月6日&#xff0c;张家口市政府新闻办召开新闻发布会&#xff0c;发布10条草原天路精品旅游线路&#xff0c;同时就草原天路今年改造提升重点工作进行介绍。其中&#xff0c;10条精品旅游线路包含5条玩转天路经典线路和5条穿越天路新玩法线路。 1、寻“天路之巅”网红打…