美文网首页猪哥Python猪哥算法
排序算法——(1)简介

排序算法——(1)简介

作者: 猪哥66 | 来源:发表于2019-03-18 09:56 被阅读5次

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

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

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

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

一、排序定义

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

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

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

二、相关概念

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

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

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

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

a)比较排序:

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

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

b)非比较排序:

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

基数排序
现实生活中非比较排序的例子如大学坐位置;
[图片上传失败...(image-79198c-1552874176257)]
[图片上传失败...(image-128ae-1552874176257)]

2.稳定和不稳定

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

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

在这里插入图片描述

a)稳定:

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

b)不稳定:

如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
[图片上传失败...(image-e0c649-1552874176257)]

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))。

[图片上传失败...(image-a177b6-1552874176257)]

c)复杂度

上面给大家讲了时间复杂度和空间复杂度,下面看看常见的几种复杂度:
[图片上传失败...(image-9004ad-1552874176257)][图片上传失败...(image-78e446-1552874176257)]

三、总结

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

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


    比较与稳定
    排序算法一览表.png

参考:

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

相关文章

  • 排序:选择排序(算法)

    文 | 莫若吻 1.简介 排序就是算法。  选择排序(Selection sort)是一种简单直观的排序算法。 选...

  • 排序算法——(1)简介

    随着人口城镇化的进程,城市人口的慢慢增加,对于一些生活在一二线城市的同学来说,排队已然成为生活中的基操:上公交排队...

  • lecture 1

    算法导论Lesson1 课程简介: 内容主要包括: 算法的含义、意义的简要介绍; 算法的分析; 插入排序、合并排序...

  • Java数组冒泡算法与添加删除算法

    1.冒泡算法 升序算法: 降序算法: 注意!这里降序算法的输出打印方法要改成逆序打印 冒泡排序简介(从小到大排序)...

  • 经典排序算法

    1. 排序算法简介 1.1 算法分类 比较类排序(非线性时间比较类排序):通过比较来决定元素间的相对次序,由于其...

  • 归并与快排——1.如何选择合适的排序算法

    原创文章,转载请注明出处 1. 排序算法简介 提起排序算法,相信大家并不陌生。最常见也是最基础的有:插入排序,选择...

  • Go-三大民工排序算法

    简介 三大 “民工”(意为连毫无闲暇时间的民工一族都耳熟能详) 排序算法 1. 选择排序 算法实现 测试代码 排序...

  • c语言实现希尔排序算法

    1.算法简介    希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。该方法又称缩...

  • 数据结构与算法简述(下)

    目录: 算法简介 排序算法 递归与穷举 贪心与分治 动态规划和回溯 1.算法简介 解题方案的准确而完整的描述,是一...

  • JavaScript实现的9大排序算法

    笔试面试经常涉及各种算法,本文简要介绍常用的一些算法,并用javascript实现。 1、插入排序 1)算法简介 ...

网友评论

    本文标题:排序算法——(1)简介

    本文链接:https://www.haomeiwen.com/subject/dpnmmqtx.html