排序演算法(sorting algorithm)是計算機演算法的乙個組成部分。
排序的目標是將一組資料 (即乙個序列) 重新排列,排列後的資料符合從大到小 (或者從小到大) 的次序。這是古老但依然富有挑戰的問題。donald knuth的經典之作《計算機程式設計藝術》(the art of computer programming)的第三卷就專門用於討論排序和查詢。從無序到有序,有效的減小了系統的熵值,增加了系統的有序度。對於乙個未知系統來說,有序是非常有用的先驗知識。因此,排序演算法很多時候構成了其他快速演算法的基礎,比如二分法就是基於有序序列的查詢演算法。直到今天,排序演算法依然是電腦科學積極探索的乙個方向。
我在這裡列出一些最常見的排序方法,並嘗試使用c語言實現它們。一組資料儲存為乙個陣列a,陣列有n個元素。a[i]為陣列中的乙個元素,i為元素在陣列中的位置 (index)。根據c的規定,陣列下標從0開始。假設陣列從左向右排列,下標為0的元素位於陣列的最左邊。
序列將最終排列成從小到大的順序。下面函式中的引數ac是陣列中元素的數目,也就是n。
紙上談兵 佇列 queue
佇列 queue 是乙個簡單而常見的資料結構。佇列也是有序的元素集合。佇列最大的特徵是first in,first out fifo,先進先出 即先進入佇列的元素,先被取出。這一點與棧 stack 形成有趣的對比。佇列在生活中很常見,排隊買票 排隊等車 先到的人先得到服務並離開佇列,後來的人加入到佇...
紙上談兵 佇列 queue
佇列 queue 是乙個簡單而常見的資料結構。佇列也是有序的元素集合。佇列最大的特徵是first in,first out fifo,先進先出 即先進入佇列的元素,先被取出。這一點與棧 stack 形成有趣的對比。佇列在生活中很常見,排隊買票 排隊等車 先到的人先得到服務並離開佇列,後來的人加入到佇...
紙上談兵 棧 stack
棧 stack 是簡單的資料結構,但在計算機中使用廣泛。它是有序的元素集合。棧最顯著的特徵是lifo last in,first out,後進先出 當我們往箱子裡存放一疊書時,先存放的書在箱子下面,我們必須將後存放的書取出來,才能看到和拿出早先存放的書。棧中的每個元素稱為乙個frame。而最上層元素...