随着人口城镇化的进程,城市人口的慢慢增长,对于一些生活在一二线城市的同窗来讲,排队已然成为生活中的基操:上公交排队、打车排队、坐地铁排队、点餐排队、喝奶茶排队、办证排队、下课ATM取钱排队……说到排队,猪哥想起有次去银行办事的我……
排队咱们能够理解为是根据时间(先来后到的)作的一种排序,使元素从无序到有序的方法,咱们称为:排序算法。程序员
程序世界每每和现实世界有不少类似之处,因此排序的问题在工做中也经常会遇到,好比商品根据不一样条件排序、搜索相关性排序、以及一些根据时间或以某种规则的排序等等;并且在面试和算法比赛中排序也是必不可少的一个考点,好比手写一个快排、如何处理亿级数据排序以及时间复杂和空间复杂度等问题;面试
排序算法对程序员来讲能够说是一项基本功,其重要性是不言而喻的。本期猪哥带你们来了解下常见的十大排序算法,而本文会做为开胃菜为你们简单介绍一些排序算法的相关概念,下次会为你们详细讲解每种排序的代码实现及图解!算法
既然排序如此重要那何为排序呢?看看百科对排序的定义:函数
排序是计算机内常常进行的一种操做,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。——百度百科设计
猪哥的理解是:简单来讲就是将一组无序的数据经过某种算法而后使它们按某种规则有序的排列,这就是排序的定义。3d
排序(Sorting) 是计算机程序设计中的一种重要操做,它的功能是将一个数据元素(或记录)的任意序列,从新排列成一个关键字有序的序列。blog
排序算法是一种算法,而算法是与语言无关的,你能够用Python实现,也能够用Java、C、Js等任何语言实现。排序
咱们将排序的时候元素之间是否须要比较分为:比较排序和非比较排序,下面简单理解一下这两个概念:进程
顾名思义就是须要经过元素之间比较以后再决定前后顺序。以下冒泡排序的动图,每次都是选取两个元素(绿色)进行比较:
现实生活中这种比较排序的例子不少,好比中学按成绩排名或高矮顺序来安排座位;图片
非比较排序就是不须要经过元素之间的比较就能够肯定每一个元素的位置,以下是基数排序的动图,排序时每一个元素并不须要比较,而是有本身固定的位置:
现实生活中非比较排序的例子如大学坐位置;
咱们排队的时候,当出现两我的同时抢占一个位置的状况,难免会发生一些口角;而在排序算法中也会遇到两元素相同的状况,这时候怎么办呢?
假设咱们有这样一组数据[7,5,2,5],而后咱们来看看稳定排序算法和不稳定排序算法得出的结果:
若是a本来在b前面,而a=b,排序以后a仍然在b的前面。
若是a本来在b的前面,而a=b,排序以后 a 可能会出如今 b 的后面。
算法复杂度分为时间复杂度和空间复杂度。其做用: 时间复杂度是指执行算法所须要的计算工做量;而空间复杂度是指执行这个算法所须要的内存空间。(算法的复杂性体如今运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,所以复杂度分为时间和空间复杂度)。
时间复杂度(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)) 为算法的渐进时间复杂度,简称时间复杂度。
空间复杂度(Space Complexity)是对一个算法在运行过程当中临时占用存储空间大小的量度,记作S(n)=O(f(n))。
上面给你们讲了时间复杂度和空间复杂度,下面看看常见的几种复杂度:
本文为你们介绍了排序算法的三个相关知识点:
参考: