排序算法——(1)简介

随着人口城镇化的进程,城市人口的慢慢增加,对于一些生活在一二线城市的同学来说,排队已然成为生活中的基操:上公交排队、打车排队、坐地铁排队、点餐排队、喝奶茶排队、办证排队、下课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

原文地址:https://www.cnblogs.com/pig66/p/10550591.html

时间: 2024-10-28 14:30:08

排序算法——(1)简介的相关文章

学习排序算法简介

学习排序算法简介 学习排序(Learning to Rank, LTR)是一类基于机器学习方法的排序算法. 传统经典的模型,例如基于TFIDF特征的VSM模型,很难融入多种特征,也就是除了TFIDF特征之外,就无法融入其他种类的特征了. 而机器学习的方法很容易融合多种特征,而且有成熟深厚的理论基础,参数也是通过迭代计算出来的,有一套成熟理论来解决稀疏.过拟合等问题. LTR方法大致可以分成三类: 1) Pointwise 单文档方法 2) Pairwise 文档对方法 3) Listwise 文

常用排序算法简介以及Java实现代码

排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列.分内部排序和外部排序.若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序.反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序. 稳定排序:假设在待排序的文件中,存在两个或两个以上的记录具有相同的关键字,在用某种排序法排序后,若这些相同关键字的元素的相对次序仍然不变,则这种排序方法是稳定的. 冒泡,插入,基数,归并属于稳定排序 选择,快速,希尔,堆

常见的排序算法简介

排序的稳定性 因为待排序的记录序列中可能存在两个或两个以上的关键字相等的记录, 排序结果可能会存在不唯一的情况.所以就有稳定与不稳定的定义. 假设ki=kj( 1 =< i <= n,1 =< j <= n, i != j),且在排序前的序列中ri领先于rj.如果排序后ri仍领先于rj,则称所用的排序方法是稳定的;反之,若可能使得排序后的序列中rj领先于ri,则称所用的排序方法是不稳定的. 只要有一组关键字发生类似情况,就可认为此排序方法是不稳定的. 内排序和外排序 根据在排序过程

数据结构基础 排序算法(一) 概念篇

本辑将会对笔试面试最常涉及到的12种排序算法(包括插入排序.二分插入排序.希尔排序.选择排序.冒泡排序.鸡尾酒排序.快速排序.堆排序.归并排序.桶排序.计数排序和基数排序)进行详解.每一种算法都有基本介绍.算法原理分析.图解演示.算法代码.笔试面试重点分析.笔试面试题等板块. 一.插入排序 1)算法简介 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常

常见排序算法总结

部分转自 http://blog.csdn.net/whuslei/article/details/6442755 排序算法经过了很长时间的演变,产生了很多种不同的方法.对于初学者来说,对它们进行整理便于理解记忆显得很重要.每种算法都有它特定的使用场合,很难通用.因此,我们很有必要对所有常见的排序算法进行归纳. 我不喜欢死记硬背,我更偏向于弄清来龙去脉,理解性地记忆.比如下面这张图,我们将围绕这张图来思考几个问题. 上面的这张图来自一个PPT.它概括了数据结构中的所有常见的排序算法.现在有以下几

排序算法汇总

1.排序算法简介 将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序.假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的:否则称为不稳定的.   比较类非线性时间排序:交换类排序(快速排序和冒泡排序).插入类排序(简单插入排序和希尔排序).选择类排序(简单选择排序和堆排序).归并排序(二路归并排序和多路归并排序).   非比较类

各种排序算法汇总

简介 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列.分内部排序和外部排序.若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序.反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序.内部排序的过程是一个逐步扩大记录的有序序列长度的过程. 将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序.假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持

各种排序算法汇总(转)

目录 简介 交换排序 冒泡排序 快速排序 插入排序 直接插入排序 希尔排序 选择排序 简单选择排序 堆排序 归并排序 基数排序 总结 简介 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列.分内部排序和外部排序.若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序.反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序.内部排序的过程是一个逐步扩大记录的有序序列长度的过程. 将杂乱无章的数据元素,通过

转载部长一篇大作:常用排序算法之JavaScript实现

注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang1724/p/3946339.html#3037096.O(∩_∩)O~  知识产权归部长原文所有. 笔试面试经常涉及各种算法,本文简要介绍常用的一些算法,并用JavaScript实现. 1.插入排序 1)算法简介 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫