排序算法——(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)简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python之父重回决策层,社区治理新方
- 下一篇: 快速排序到底有多快?