排序算法——(1)簡介

隨着人口城鎮化的進程,城市人口的慢慢增長,對於一些生活在一二線城市的同窗來講,排隊已然成爲生活中的基操:上公交排隊、打車排隊、坐地鐵排隊、點餐排隊、喝奶茶排隊、辦證排隊、下課ATM取錢排隊……說到排隊,豬哥想起有次去銀行辦事的我……
排隊
排隊咱們能夠理解爲是根據時間(先來後到的)作的一種排序,使元素從無序到有序的方法,咱們稱爲:排序算法。程序員

程序世界每每和現實世界有不少類似之處,因此排序的問題在工做中也經常會遇到,好比商品根據不一樣條件排序、搜索相關性排序、以及一些根據時間或以某種規則的排序等等;並且在面試和算法比賽中排序也是必不可少的一個考點,好比手寫一個快排、如何處理億級數據排序以及時間複雜和空間複雜度等問題;面試

排序算法對程序員來講能夠說是一項基本功,其重要性是不言而喻的。本期豬哥帶你們來了解下常見的十大排序算法,而本文會做爲開胃菜爲你們簡單介紹一些排序算法的相關概念,下次會爲你們詳細講解每種排序的代碼實現及圖解!算法

1、排序定義

既然排序如此重要那何爲排序呢?看看百科對排序的定義:函數

排序是計算機內常常進行的一種操做,其目的是將一組「無序」的記錄序列調整爲「有序」的記錄序列。——百度百科設計

豬哥的理解是:簡單來講就是將一組無序的數據經過某種算法而後使它們按某種規則有序的排列,這就是排序的定義。3d

2、相關概念

排序(Sorting) 是計算機程序設計中的一種重要操做,它的功能是將一個數據元素(或記錄)的任意序列,從新排列成一個關鍵字有序的序列。blog

排序算法是一種算法,而算法是與語言無關的,你能夠用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)複雜度

上面給你們講了時間複雜度和空間複雜度,下面看看常見的幾種複雜度:
在這裏插入圖片描述在這裏插入圖片描述

3、總結

本文爲你們介紹了排序算法的三個相關知識點:

  1. 比較排序和非比較排序
  2. 穩定和不穩定
  3. 算法複雜度
    比較與穩定
    十大排序算法一覽表

參考:

相關文章
相關標籤/搜索