说说常见的排序算法有哪些?区别?

这篇具有很好参考价值的文章主要介绍了说说常见的排序算法有哪些?区别?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说说常见的排序算法有哪些?区别?

一、是什么

排序是程序开发中非常常见的操作,对一组任意的数据元素经过排序操作后,就可以把他们变成一组一定规则排序的有序序列

排序算法属于算法中的一种,而且是覆盖范围极小的一种,彻底掌握排序算法对程序开发是有很大的帮助的

对与排序算法的好坏衡量,主要是从时间复杂度、空间复杂度、稳定性

时间复杂度、空间复杂度前面已经讲过,这里主要看看稳定性的定义

稳定性指的是假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变

即在原序列中,r[i] = r[j],且 r[i] 在 r[j] 之前,而在排序后的序列中,r[i] 仍在 r[j] 之前,则称这种排序算法是稳定的;否则称为不稳定的

二、有哪些

常见的算法排序算法有:

  • 冒泡排序
  • 选择排序
  • 插入排序
  • 归并排序
  • 快速排序

冒泡排序

一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来

思路如下:

  • 比较相邻的元素,如果第一个比第二个大,就交换它们两个

  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数

  • 针对所有的元素重复以上的步骤,除了最后一个

  • 重复上述步骤,直到没有任何一堆数字需要比较

说说常见的排序算法有哪些?区别?

选择排序

选择排序是一种简单直观的排序算法,它也是一种交换排序算法

无论什么数据进去都是 O(n²)的时间复杂度。所以用到它的时候,数据规模越小越好

唯一的好处是不占用额外的内存存储空间

思路如下:

  • 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
  • 从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
  • 重复第二步,直到所有元素均排序完毕
  • 说说常见的排序算法有哪些?区别?

插入排序

插入排序是一种简单直观的排序算法

它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入

解决思路如下:

  • 把待排序的数组分成已排序和未排序两部分,初始的时候把第一个元素认为是已排好序的
  • 从第二个元素开始,在已排好序的子数组中寻找到该元素合适的位置并插入该位置(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
  • 重复上述过程直到最后一个元素被插入有序子数组中

说说常见的排序算法有哪些?区别?

归并排序

归并排序是建立在归并操作上的一种有效的排序算法

该算法是采用分治法的一个非常典型的应用

将已有序的子序列合并,得到完全有序的序列,即先使每个子序列有序,再使子序列段间有序

解决思路如下:

  • 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
  • 设定两个指针,最初位置分别为两个已经排序序列的起始位置
  • 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
  • 重复步骤3直到某一指针到达序列尾
  • 将另一序列剩下的所有元素直接复制到合并序列尾

说说常见的排序算法有哪些?区别?

快速排序

快速排序是对冒泡排序算法的一种改进,基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据要小

再按这种方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,使整个数据变成有序序列

解决思路如下:

  • 从数列中挑出一个元素,称为"基准"(pivot)
  • 重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任何一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作
  • 递归地(recursively)把小于基准值元素的子数列和大于基准值元素的子数列排序

说说常见的排序算法有哪些?区别?

 

三、区别

除了上述的排序算法之外,还存在其他的排序算法,例如希尔排序、堆排序等等......

区别如下图所示:

说说常见的排序算法有哪些?区别?

参考文献

  • https://www.runoob.com/w3cnote/bubble-sort.html
  • http://www.x-lab.info/post/sort-algorithm/
  • https://zhuanlan.zhihu.com/p/42586566

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 说说常见的排序算法有哪些?区别?文章来源地址https://www.toymoban.com/news/detail-855179.html

到了这里,关于说说常见的排序算法有哪些?区别?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 说说你对链表的理解?常见的操作有哪些?

    链表(Linked List)是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,由一系列结点(链表中每一个元素称为结点)组成 每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域

    2024年04月15日
    浏览(47)
  • 说说你对数据结构的理解?有哪些?区别?

    数据结构是计算机存储、组织数据的方式,是指相互之间存在一种或多种特定关系的数据元素的集合 前面讲到,一个程序 = 算法 + 数据结构,数据结构是实现算法的基础,选择合适的数据结构可以带来更高的运行或者存储效率 数据元素相互之间的关系称为结构,根据数据元

    2024年04月10日
    浏览(38)
  • 字节一面:说说HTTP 常见的状态码有哪些,适用场景?

    前言 最近博主在 字节面试 中遇到这样一个面试题,这个问题也是前端面试的高频问题,我们经常与网路请求打交道,与http打交道,也会根据返回的状态码来做出不同逻辑判断,所以作为一个前端工程师必须要深入掌握这个知识点,博主在这给大家细细道来。 🚀 作者简介:

    2024年02月08日
    浏览(39)
  • 【面试合集】说说微信小程序中路由跳转的方式有哪些?区别?

    微信小程序拥有 web 网页和 Application 共同的特征,我们的页面都不是孤立存在的,而是通过和其他页面进行交互,来共同完成系统的功能 在微信小程序中,每个页面可以看成是一个 pageModel , pageModel 全部以栈的形式进行管理 常见的微信小程序页面跳转方式有如下: wx.navig

    2024年01月19日
    浏览(50)
  • css基础知识二十:说说对Css预编语言的理解?有哪些区别?

    一、是什么 Css 作为一门标记性语言,语法相对简单,对使用者的要求较低,但同时也带来一些问题 需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用,尤其对于非前端开发工程师来讲,往往会因为缺少 Css 编写经验而很难写出组织良好且易于维护的 Css 代码

    2024年02月16日
    浏览(44)
  • 【面试合集】说说什么是进程?什么是线程?区别?

    操作系统中最核心的概念就是进程,进程是对正在运行中的程序的一个抽象,是系统进行资源分配和调度的基本单位 操作系统的其他所有内容都是围绕着进程展开的,负责执行这些任务的是 CPU 进程是一种抽象的概念,从来没有统一的标准定义看,一般由程序、数据集合和进

    2024年01月20日
    浏览(52)
  • javascript基础二十一:说说你对BOM的理解,常见的BOM对象你了解哪些?

    一、是什么 BOM (Browser Object Model),浏览器对象模型,提供了独立于内容与浏览器窗口进行交互的对象 其作用就是跟浏览器做一些交互效果,比如如何进行页面的后退,前进,刷新,浏览器的窗口发生变化,滚动条的滚动,以及获取客户的一些信息如:浏览器品牌版本,屏幕分

    2024年02月07日
    浏览(43)
  • 说说HTTP 和 HTTPS 有什么区别?

    http协议 超文本传输协议,是互联网上应用最多的协议, 基于TCP/IP 通讯协议来传递信息,用于从WWW服务器传输超文本到本地浏览器的传输协议。 https协议 我们可以将其看作是以安全为目标的http协议。在 http协议的基础 上增加了 SSL/TSL层 ,可以确保数据的传输的安全性和完整

    2024年02月10日
    浏览(52)
  • 今天我们来说说常用的三种排序算法:选择排序、插入排序、快速排序

    原文链接:http://www.ibearzmblog.com/#/technology/info?id=8ac4902f82f525e1456624d5d7a545dc 选择排序、插入排序、快速排序这三种算法算是比较初级的排序算法,对它们的原理和技巧,可以方便我们对后面的算法理解。 温馨提示,因为动图不好弄,所以我在网上下载了AlgorithmMan来进行动图演示

    2024年02月16日
    浏览(42)
  • 说说对React中类组件和函数组件的理解?有什么区别?

    通过ES6类的编写形式去编写组件,该类必须继承React.Component,通过this.props的方式去访问父组件传递过来的参数,且在类组件中必须使用render方法,在return中返回React对象,如下: 通过函数编写的形式去实现一个React组件,是React中定义组件最简单的方式,如下: 1.编写形式不

    2024年01月22日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包