各类排序算法比较和应用场景
简介
插入排序
插入排序是一种较为简单的排序算法,它的基本思想是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
形象的可以理解为打扑克抓拍的过程,通常我们右手抓牌,没抓一张牌,就放到左手,抓下一张牌后,会把这张牌依次与左手上的牌比较,并把它插入到一个合适的位置(按牌面大小)。
希尔排序
希尔排序是对直接插入排序的一种优化,实质就是把直接插入排序改为了分组插入排序。其基本思想就是将整个待排序元素序列按gap(步长)分割为N个组,对每个组进行直接插入排序,然后在减小gap(步长)再进行直接插入排序,直到gap达到最小时,即数组基本达到有序时,再对数组进行直接插入排序,此时直接插入排序就可以达到最高效率。
选择排序
选择排序的排序思想就和它的名字一样,每次通过从无序的数组中选择出一个最小的(要求升序排列)数把他放到数组的最前面。再依次找次小的数字放到数组无序区的最前。直到数组为有序。
堆排序
堆排序(使用大堆,升序)从基本实现原理来说也是一种选择排序,它同样是确定了位置选择符合位置的元素,但是堆排序是更加优化的选择排序的版本,它利用了堆的特性。父结点的值大于子结点,且满足完全二叉树,大大提高了选择排序的效率。
冒泡排序
冒泡排序(这里指升序)是一种非常简单直观的排序方式,它是一种交换式的排序方法,基本思想就是相近的两个数字作比较,小的放到前面,大的放后面,按照这个规则从头向后比较,最大的数就被换到了数组尾。
快速排序
快速排序是一种在实际应用中经常用到的排序算法,它的应用场景是大规模的数据排序,并且实际性能要好于归并排序。它的基本原理是从数组中选取一个元素,把所有大于这个元素的数都放到它的后面,所有小于这个元素的数都放到它的前面,然后这个元素就把原数组切分成了两个部分,再分别对这个两个部分进行同样的操作,直到数组不能再切分的时候,此时数组为有序。
归并排序
“归并”的含义是将两个或两个以上的有序表组合成一个新的有序表,归并排序和快排一样也采用的是分治的思想,它的基本原理是通过对若干个有序结点序列的合并为一个有序序列来实现排序的。
基数排序
基数排序(升序)是一种非比较式的排序方式,和之前博文中提到的快排,冒泡排序,插入排序这些排序算法不一样,它没有使用任何交换的方式,它的基本思想是通过分配的方法把元素从小到大分配,以到达排序的作用。
比较
稳定性是指如果存在多个具有相同排序码的记录,经过排序后,这些记录的相对次序仍然保持不变,则这种排序算法称为稳定的。
应用场景
(1)若n较小(如n≤50),可采用直接插入或直接选择排序。
当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。
若要求排序稳定,则可选用归并排序。但前面介绍的从单个记录起进行两两归并的排序算法并不值得提倡,通常可以将它和直接插入排序结合在一起使用。先利用直接插入排序求得较长的有序子序列,然后再两两归并之。因为直接插入排序是稳定 的,所以改进后的归并排序仍是稳定的。
各类排序算法比较和应用场景相关推荐
- 各类排序算法总结(作者:__Boost)
各类排序算法总结 一. 排序的基本概念 排序(Sorting)是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个项值有序的序列. 有 n 个记录的序列{R1 ...
- 各类排序算法汇总及动画演示(C语言)
常用排序算法及动画演示 (一)插入排序 插入排序可形象理解为打扑克时理牌的一个过程,具体分为直接插入.折半插入排序.希尔排序三种: ①直接插入排序 void InsertSort(int a[],in ...
- JAVA堆排序有监视哨吗_数据结构-各类排序算法总结
各类排序算法总结 一. 排序的基本概念 排序(Sorting)是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个项值有序的序列. 有 n 个记录的序列{R1 ...
- 各类排序算法实现(亲测)
排序算法通常分为外部排序和内部排序,通常所说的八类排序属于内部排序: 外部排序在此不说明,主要给出八类排序的简单思想和实现: 1.插入排序 1.1 直接插入排序: 每次将一个新数,插入到已经排列好的有 ...
- 插入排序java_「Java」各类排序算法
排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.下面讲的排序都是属于内排序.内排序有可以分为以下几类: (1) 插入 ...
- 各类排序算法优缺点对比
1.插入排序 基本思想: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表.即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为 ...
- 常见排序算法:冒泡排序
为什么80%的码农都做不了架构师?>>> 从这篇文章开始,我会陆陆续续将我所能用Java实现的算法在这里简单做个梳理,也算温故而知新吧.受个人水平和时间限制,可能会有错漏,欢迎 ...
- 开课吧:什么是排序算法
排序算法在我们日常生活中其实很常见,比如office全家桶里的表格工具,可以按照自定义的规则进行排序:如果表格是一张成绩单,我们可以按照分数排序:如果表格是一张人员名单,我们可以按照人名的读音顺序排序 ...
- 各种排序算法比较(java)
排序算法是数据结构中十分基础的内容,本文总结了常用的排序算法的原理和性能,还给出了相关的图解,并且采用java语言实现了算法,最后给了一个面试中实际的例子,以及算法复杂度的比较 1.选择排序 最基本的 ...
最新文章
- 13寸笔记本电脑尺寸_2020笔记本电脑推荐(华为篇)
- 12.5K 颗星星的 C++ 教程,带你高速上手现代 C++ !
- 以太网交换芯片行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- Python爬虫入门并不难,甚至入门也很简单
- CCF201403-2 窗口(100分)
- 01-执行上下文与变量对象
- 大规模电机控制的方案选择-电机和驱动器篇
- 特大喜讯!鸿蒙项目来了:在线电子词典
- 火星坐标系转北京54坐标方法
- html有哪些段落及排版标记,04.HTML排版标记
- bcm43142 linux 驱动下载,CentosRedhat下bcm43142博通无线网卡linux驱动之二
- 如何安装HDDM,无法使用HDDM
- PHP后端接入短信接口为用户发送通知短信
- Linux内核设计与实现(十)| 页高速缓存和页回写
- Jenkins 通过SSH将文件发送到远程服务器
- AXP221电源管理芯片使用注意点
- 计算机应用世界排名,全球计算机杂志排名
- 【Python】文件选择框选择文件
- tf2常用数据类型与常用函数汇总
- 网易游戏岗位大揭秘——我在网易做测试开发(QA)
热门文章
- 智能电子办公标牌解决方案
- 数字量输入扩展模块支持modbus
- linux做子域dns,Linux下的DNS服务器配置实践(三)-子域授权、转发、视图
- Linux 2.6.19.x 内核编译配置选项简介(转)
- win32 zbar
- Python先生,你好!(6)——np.random函数详解
- nRF5340(入门篇)之1.4 浅谈双核系统
- Rockland Mcl-1抗体说明书
- Visual Studio Code国内镜像下载
- linux如何调试elf程序,Linux下ELF的执行过程