随着人口城镇化的进程,城市人口的慢慢增加,对于一些生活在一二线城市的同学来说,排队已然成为生活中的基操:上公交排队、打车排队、坐地铁排队、点餐排队、喝奶茶排队、办证排队、下课ATM取钱排队……说到排队,猪哥想起有次去银行办事的我……

排队我们可以理解为是根据时间(先来后到的)做的一种排序,使元素从无序到有序的方法,我们称为:排序算法

程序世界往往和现实世界有很多相似之处,所以排序的问题在工作中也常常会遇到,比如商品根据不同条件排序、搜索相关性排序、以及一些根据时间或以某种规则的排序等等;而且在面试和算法比赛中排序也是必不可少的一个考点,比如手写一个快排、如何处理亿级数据排序以及时间复杂和空间复杂度等问题;

排序算法对程序员来说可以说是一项基本功,其重要性是不言而喻的。本期猪哥带大家来了解下常见的十大排序算法,而本文会作为开胃菜为大家简单介绍一些排序算法的相关概念,下次会为大家详细讲解每种排序的代码实现及图解!

一、排序定义

既然排序如此重要那何为排序呢?看看百科对排序的定义:

排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。——百度百科

猪哥的理解是:简单来说就是将一组无序的数据通过某种算法然后使它们按某种规则有序的排列,这就是排序的定义。

二、相关概念

排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。

排序算法是一种算法,而算法是与语言无关的,你可以用Python实现,也可以用Java、C、Js等任何语言实现。

1.比较排序和非比较排序

我们将排序的时候元素之间是否需要比较分为:比较排序和非比较排序,下面简单理解一下这两个概念:

a)比较排序:

顾名思义就是需要通过元素之间比较之后再决定先后顺序。如下冒泡排序的动图,每次都是选取两个元素(绿色)进行比较:

现实生活中这种比较排序的例子很多,比如中学按成绩排名或高矮顺序来安排座位;

b)非比较排序:

非比较排序就是不需要通过元素之间的比较就可以确定每个元素的位置,如下是基数排序的动图,排序时每个元素并不需要比较,而是有自己固定的位置:

现实生活中非比较排序的例子如大学坐位置;

2.稳定和不稳定

我们排队的时候,当出现两个人同时抢占一个位置的情况,不免会发生一些口角;而在排序算法中也会遇到两元素相同的情况,这时候怎么办呢?

假设我们有这样一组数据[7,5,2,5],然后我们来看看稳定排序算法不稳定排序算法得出的结果:

a)稳定:

如果a原本在b前面,而a=b,排序之后a仍然在b的前面。

b)不稳定:

如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。

3.算法复杂度

算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。(算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度)。

a)时间复杂度:

时间复杂度(Time Complexity)是描述运行算法所花费的时间量的计算复杂度,记做O(f(n))。

n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但是它的变化是有规律的,所以引入时间复杂度这个概念。一般情况下,算法中的基本操作重复次数的是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度

b)空间复杂度:

空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。

c)复杂度

上面给大家讲了时间复杂度和空间复杂度,下面看看常见的几种复杂度:

三、总结

本文为大家介绍了排序算法的三个相关知识点:

  1. 比较排序和非比较排序
  2. 稳定和不稳定
  3. 算法复杂度

参考:

  1. https://dwz.cn/FsEBEVK6
  2. https://dwz.cn/8hoIwpxo

排序算法——(1)简介相关推荐

  1. 第 7 章 排序算法

    第 7 章 排序算法 1.排序算法介绍 1.1.排序算法的简介 排序也称排序算法(Sort Algorithm), 排序是将一组数据, 依指定的顺序进行排列的过程. 1.2.排序算法的分类 内部排序: ...

  2. 数据结构之你没见过的排序算法!

    很早以前曾写过冒泡排序的文章 ,那时候还只知道用排序,现在随着业务的积累,自己在这个行业也懂了一点皮毛,特地总结一下自己学过的排序算法,以及排序的性能,参考了许许多多的资料 ,明白了排序的的方式千奇百 ...

  3. 世界上最快的排序算法——Timsort

    转: 世界上最快的排序算法--Timsort 前言 经过60多年的发展,科学家和工程师们发明了很多排序算法,有基本的插入算法,也有相对高效的归并排序算法等,他们各有各的特点,比如归并排序性能稳定.堆排 ...

  4. shell脚本详解(六)——数组简介和排序算法

    shell脚本详解(六)--数组简介和排序算法 一.数组 1.数组的定义方法 ①.方式一: ②.方式二: ③.方式三: ④.方式四: 2.数组包括的数据类型 3.获取数组长度 4.获取数据列表 5.读 ...

  5. 【排序】八大排序算法简介及它们各自的特点总结

    概述: 一般使用的八大排序算法是:插入排序.选择排序.冒泡排序.希尔排序.归并排序.快速排序.堆排序.基数排序,每个方法有其适合的使用场景,可以根据具体数据进行选择. 几个概念: 内部排序:排序期间元 ...

  6. 算法复杂度简介以及排序算法简介

    目录 一.算法复杂度 时间复杂度: 1.时间频度可能不同,但是时间复杂度可能相同: 2.时间复杂度计算规则: 3.常见的时间复杂度场景: 空间复杂度: 十大排序算法: 1.冒泡: 2.选择: 3.插入 ...

  7. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  8. 10大经典排序算法,20+张图就搞定

    作者 | 李肖遥 来源 | 技术让梦想更伟大 冒泡排序 简介 冒泡排序是因为越小的元素会经由交换以升序或降序的方式慢慢浮到数列的顶端,就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名冒泡排序. ...

  9. 史上最全排序算法总结!建议收藏

    作者 | 铁猴 责编 | 屠敏 出品 | CSDN 博客  简介 本文对常见排序算法进行总结. 排序算法 冒泡排序 该算法比较简单,几乎所有语言涉及到算法时,都会涉及到冒泡算法. 算法思路: 比较相邻 ...

最新文章

  1. usaco Picture(离散化求线段周长)
  2. 最新以及历史各版本 .NET Framework 的下载
  3. c语言合同信息管理,合同管理系统C语言代码.doc
  4. 小波变换原理_小波变换的知识,转载的
  5. 层次聚类分析代码_4个步骤,用聚类分析法实现用户分析!
  6. 5美元的互联网硬件主板
  7. 金山盛大成立合资公司
  8. 上课学计算机的周记,计算机实习周记20篇
  9. 中南大学电磁场理论matlab,中南大学电磁场理论实验2.doc
  10. URL 编码和解码工具
  11. 操作系统清华 向勇 陈渝(RISC-V)(1)---概述
  12. (数据分析)网课评论分析
  13. 总结 62 种在深度学习中的数据增强方式
  14. i english怎么样,家长讲讲自己的经历!
  15. pygame-KidsCanCode系列jumpy-part2-加速度与摩擦力
  16. PHP连接MySql/SQLServer数据库
  17. 用于考核、评价的投票打分系统解决方案
  18. 想要空手夺白刃?看看用户裂变的四板斧
  19. stm32F103采用内部晶振8MHz时钟和外部晶振初始化代码
  20. springmvc--sso单点登录cas统一身份认证器

热门文章

  1. keil5图标变成白色_keil5菜单栏图标错乱怎么办? keil5菜单栏快捷图标错位的解决办法...
  2. 七十三、Python | Leetcode数字系列(上篇)
  3. JS 如何截取部分日期呢
  4. ECCV 2020 Spotlight | 图像定位上的细粒化区域相似性自监督
  5. 预训练依旧强大:少样本条件下的任务导向型对话生成
  6. 震撼来袭 | 人工智能Paper精读班,视频讲解+代码实现(还剩28个名额)
  7. python-time.time()
  8. 【SpringBoot集成ElasticSearch 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(配置+增删改查测试源码)【推荐使用】
  9. Java 调用接口工具类并设置请求和传输超时时间
  10. camuda流程引擎如此简单「五」