排序算法分析——什么时候 用 什么排序

排序算法 & 分析

  • 排序算法历史
  • 排序算法分析
    • 很快的排序
    • 较快的排序
    • 中等的排序
    • 很慢的排序
  • 分析的结果
    • 0.没有要求
    • 1.对速度有要求
    • 2.边排序边操作
    • 3.条件1&条件2
    • 4.在有序数中操作
    • 5.条件1&条件4

了解各种排序,详见排序专栏

排序算法历史

纵观排序算法的历史,有哪些排序算法的速度可以到达 O ( n l o g ( n ) ) O(n~log(n)) O(n log(n))

  • 冒泡排序 B u b b l e Bubble Bubble S o r t Sort Sort):冒泡排序是最简单的排序算法之一。它通过多次比较和交换相邻元素的方式,将最大(或最小)的元素逐渐“冒泡”到数组的一端。尽管冒泡排序的时间复杂度为 O ( n 2 ) O(n^2) O(n2),效率较低,但它易于理解和实现。

  • 选择排序 S e l e c t i o n Selection Selection S o r t Sort Sort):选择排序是一种简单直观的排序算法。它通过每次选择未排序部分的最小(或最大)元素,并将其放置在已排序部分的末尾,逐渐构建有序序列。选择排序的时间复杂度也为 O ( n 2 ) O(n^2) O(n2),但相比冒泡排序,它的交换次数较少。

  • 插入排序 I n s e r t i o n Insertion Insertion S o r t Sort Sort):插入排序是一种稳定的排序算法。它通过将未排序部分的元素逐个插入已排序部分的适当位置,来构建有序序列。插入排序的时间复杂度为 O ( n 2 ) O(n^2) O(n2),但对于小规模或基本有序的数组,插入排序的性能较好。

  • 希尔排序 S h e l l Shell Shell S o r t Sort Sort):希尔排序是插入排序的一种改进版本。它通过将数组分割成多个较小的子序列,并对子序列进行插入排序,最后再对整个数组进行一次插入排序。希尔排序的时间复杂度介于 O ( n ) O(n) O(n) O ( n 2 ) O(n^2) O(n2)之间,取决于所选的间隔序列。

  • 归并排序 M e r g e Merge Merge S o r t Sort Sort):归并排序是一种分治算法。它将数组递归地分成两个子数组,分别进行排序,然后将两个有序子数组合并成一个有序数组。归并排序的时间复杂度为 O ( n l o g ( n ) ) O(n~log(n)) O(n log(n)),它是一种稳定的排序算法。

  • 快速排序 Q u i c k Quick Quick S o r t Sort Sort):快速排序也是一种分治算法。它通过选择一个基准元素,将数组分成两个子数组,其中一个子数组的所有元素都小于基准元素,另一个子数组的所有元素都大于基准元素。然后递归地对两个子数组进行排序。快速排序的时间复杂度为 O ( n l o g ( n ) ) O(n~log(n)) O(n log(n)),但在最坏情况下可能达到 O ( n 2 ) O(n^2) O(n2)

  • 堆排序 H e a p Heap Heap S o r t Sort Sort):堆排序利用堆这种数据结构进行排序。它通过构建最大堆(或最小堆),将堆顶元素与最后一个元素交换,并对剩余元素重新调整堆,重复这个过程直到整个数组有序。堆排序的时间复杂度为 O ( n l o g ( n ) ) O(n~log(n)) O(n log(n)),它是一种不稳定的排序算法。

  • 计数排序(这个不能算排序吧~)( C o u n t i n g Counting Counting S o r t Sort Sort):计数排序是一种非比较排序算法。它通过确定每个元素在排序后的序列中的位置,来实现排序。计数排序的时间复杂度为 O ( n + k ) O(n+k) O(n+k),其中k是待排序数组中的最大值。计数排序适用于元素范围较小的情况。

  • 桶排序 B u c k e t Bucket Bucket S o r t Sort Sort):桶排序也是一种非比较排序算法。它将待排序元素分到不同的桶中,对每个桶中的元素进行排序,然后按照桶的顺序将元素合并起来。桶排序的时间复杂度取决于桶的数量和每个桶内使用的排序算法。

  • 基数排序 R a d i x Radix Radix S o r t Sort Sort):基数排序是一种非比较排序算法。它根据元素的位数,将待排序元素按照位数从低到高进行排序。基数排序可以使用稳定的排序算法作为每个位数的排序算法,如计数排序或桶排序。

排序算法分析

很快的排序

我们发现,很快的排序,例如:桶排序基数排序它们的代码都比较复杂,一般能不用就不用。

较快的排序

而较快的排序,例如:归并排序堆排序(之所以不放快排 是因为快排实在是太不稳定了!!!),它们的代码也比较复杂(优先队列当我没说),如果使用优先队列有不方便访问,因此能不用就不用。
注:有时优先队列是很方便的。

中等的排序

中等的排序,如:希尔排序快速排序有时速度无法满足要求,并且代码也属于复杂的范畴。

很慢的排序

很慢的排序,如:冒泡排序选择排序虽然代码简短好记,但是速度实在是太慢了!!!!!!

分析的结果

0.没有要求

如果没有特殊要求的话,用优先队列进行堆排是不错的选择,另外还可以用 s o r t sort sort函数排序

1.对速度有要求

如果对速度有要求的话,建议用优先队列进行堆排,也可以用 s o r t sort sort函数排序。

说了跟没说一样

2.边排序边操作

如果要在排序中操作,建议使用各种较慢的排序算法,这样方便理解以及更改。

3.条件1&条件2

这样的话就最好用归并排序了!!这是一种优秀的排序算法,并且稳定,可以在大部分情况下使用

4.在有序数中操作

这样建议使用插入排序,因为插入排序本身就是维护一个有序数列,这样的话方便快捷!

5.条件1&条件4

插入排序优化——超越归并排序的超级算法!!

详见我的神奇博客:史上最快的插入排序

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

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

相关文章

硬件产品经理:从入门到精通(新书发布)

目录 简介 新书 框架内容 相关课程 简介 在完成多款硬件产品从设计到推向市场的过程后。 笔者于2020年开始在产品领域平台输出硬件相关的内容。 在这个过程中经常会收到很多读者的留言,希望能推荐一些硬件相关的书籍或资料。 其实,笔者刚开始做硬…

10. 实现业务功能--退出登录

目录 1. 实现 Controller 2. 单体测试 3. 实现前端界面 退出的具体实现逻辑如下: 1. 用户访问退出接口 2. 服务器注销 Session( 在 Controller 中可以直接进行处理 ) 3. 返回成功或失败 4. 如果返回成功浏览器跳转到相应页面 5. 结束 一般来说&#…

使用VS2015打开.pro文件后,编译报错

编译报错内容: MSB8036 找不到 Windows SDK 版本10.0.18362.0。请安装所需的版本的 Windows SDK 或者在项目属性页中或通过右键单击解决方案并选择“重定解决方案目标”来更改 SD 方法: 1.右键点击 Solution上,在弹出的框中点击“Retarget…

调整数组使奇数全部都位于偶数前面

题目内容: 输入一个整数数组,实现一个函数, 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分。 题目思路: 将奇数部分放在前半部分,偶数部分放在后半部分&am…

学习笔记230804---restful风格的接口,delete的传参方式问题

如果后端提供的删除接口是restful风格,那么使用地址栏拼接的方式发送请求,数据放在主体中,后端接受不到,当然也还有一种可能,后端在这个接口的接参设置上是req.query接参。 问题描述 今天遇到的问题是,de…

新榜 | CityWalk本地生活商业价值洞察报告

如果说现在有人问,最新的网络热词是什么? “CityWalk”,这可能是大多数人的答案。 近段时间,“CityWalk”刷屏了各种社交媒体,给网友们带来了一场“城市漫步”之旅。 脱离群体狂欢,这个在社交媒体引发热议的词汇背后又…

首发 | FOSS分布式全闪对象存储系统白皮书

一、 产品概述 1. 当前存储的挑战 随着云计算、物联网、5G、大数据、人工智能等新技术的飞速发展,数据呈现爆发式增长,预计到2025年中国数据量将增长到48.6ZB,超过80%为非结构化数据。 同时,数字经济正在成为我国经济发展的新…

RabbitMQ安装配置,笔记整理 RabbitMQ3.12.2版本安装配置

官网下载 RabbitMQ 官方地址:RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQ 下载时需注意Erlang Versions的版本 这里下载的是3.12.2 2.安装依赖环境 在线安装依赖环境: yum install build-essential openssl openssl-dev…

锐捷无线产品运维(Web登录、 命令行登录)

目录 登录AP产品 Console登录(只可以现场登录) Web/Telnet/SSH登录(可以现场、远程登录) 配置AP的管理地址 通过Web界面远程登录 通过Telnet、SSH等命令行的方式登录 登录AC产品 Console登录(只可以现场登录&a…

[bug] 记录version `GLIBCXX_3.4.29‘ not found 解决方法

在使用mediapipe 这个库的时候,首次使用出现 GLIBCXX_3.4.29’ not found 错误, 看起来是安装mediapipe 的时候自动升级了 matplotlib 这个库,导致依赖的 libstd.so 版本不满足了,GLIBCXX_3.4.29 is an object from libstdc.so.…

【c语言】字符函数与字符串函数(上)

大家好呀,今天给大家分享一下字符函数和字符串函数,说起字符函数和字符串函数大家会想到哪些呢??我想到的只有求字符串长度的strlen,拷贝字符串的strcpy,字符串比较相同的strcmp,今天,我要分享给大家的是我们一些其他的…

Photoshop制作漂亮光泽感3D按钮

原文链接(https://img-blog.csdnimg.cn/45472c07f29944458570b59fe1f9a0e0.png)

CentOS gcc介绍及快速升级

1.gcc介绍 GCC(GNU Compiler Collection)是一个开源的编译器套件,由 GNU(GNUs Not Unix!的递归缩写) 项目开发和维护。它是一个功能强大且广泛使用的编译器,支持多种编程语言,包括 C、C、Objective-C、Fortran、Ada 和…

性能测试技术之基础篇(精华)

目录 一、什么是性能? 二、什么是性能测试? 三、性能测试结果需要记录哪些参数? 四、如何做性能测试(性能测试流程)? 1、指标建模 2、诊断调优 五、常见性能测试工具 一、什么是性能? …

【C语言】字符函数和字符串函数

目录 1.求字符串长度strlen 2.长度不受限制的字符串函数 字符串拷贝strcpy 字符串追加strcat 字符串比较strcmp 3.长度受限制的字符串函数介绍strncpy strncat ​编辑strncmp 4.字符串查找strstr 5.字符串分割strtok 6.错误信息报告 strerror perror 7.字符分类函…

【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字

611. 有效三角形的个数 611. 有效三角形的个数https://leetcode.cn/problems/valid-triangle-number/ 题目描述: 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 解题思路: 本题是一个关于三角形是否能成立…

浅谈Fetch API

什么是Fetch API Fetch API 是一种现代的 JavaScript API,用于进行网络请求和处理响应数据。它提供了一种更简单和更灵活的方式来执行网络请求,取代了传统的 XMLHttpRequest(XHR)。 Fetch API 具有以下特点: Promise…

概述、搭建Redis服务器、部署LNP+Redis、创建Redis集群、连接集群、集群工作原理

Top NSD DBA DAY09 案例1:搭建redis服务器案例2:常用命令限案例3:部署LNPRedis案例4:创建redis集群 1 案例1:搭建redis服务器 1.1 具体要求如下 在主机redis64运行redis服务修改服务运行参数 ip 地址192.168.88.6…

【问题整理】Ubuntu 执行 apt-get install xxx 报错

Ubuntu 执行 apt-get install xxx 报错 一、问题描述: 执行apt-get install fcitx时,报如下错误 grub-pc E: Sub-process /usr/bin/dpkg returned an error code (1)二、解决方法: 尝试修复依赖问题: sudo apt-get -f install这个命令会尝试修复系统…

Elasticsearch:如何在 Ubuntu 上安装多个节点的 Elasticsearch 集群 - 8.x

Elasticsearch 是一个强大且可扩展的搜索和分析引擎,可用于索引和搜索大量数据。 Elasticsearch 通常用于集群环境中,以提高性能、提供高可用性并实现数据冗余。 在本文中,我们将讨论如何在 Ubuntu 20.04 上安装和配置具有多节点集群的 Elast…