(1)對於評述演算法優劣術語的說明
穩定:如果a原本在b前面,而a=b,排序之後a仍然在b的前面;
不穩定:如果a原本在b的前面,而a=b,排序之後a可能會出現在b的後面;
內排序:所有排序操作都在記憶體中完成;
外排序:由於資料太大,因此把資料放在磁碟中,而排序通過磁碟和記憶體的資料傳輸才能進行;
時間複雜度: 乙個演算法執行所耗費的時間。
空間複雜度: 執行完乙個程式所需記憶體的大小。
(2)排序演算法總結:
1.氣泡排序:
解析:1.比較相鄰的兩個元素,如果前乙個比後乙個大,則交換位置。
2.第一輪的時候最後乙個元素應該是最大的乙個。
3.按照步驟一的方法進行相鄰兩個元素的比較,這個時候由於最後乙個元素已經是最大的了,所以最後乙個元素不用比較。
2.快速排序:
解析:快速排序是對氣泡排序的一種改進,第一趟排序時將資料分成兩部分,一部分比另一部分的所有資料都要小。然後遞迴呼叫,在兩邊都實行快速排序。
3.插入排序:
解析:(1) 從第乙個元素開始,該元素可以認為已經被排序
(2) 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄
(3) 如果該元素(已排序)大於新元素,將該元素移到下一位置
(4) 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
(5)將新元素插入到下一位置中
(6) 重複步驟2
2.二分查詢:
解析:二分查詢,也為折半查詢。首先要找到乙個中間值,通過與中間值比較,大的放又,小的放在左邊。再在兩邊中尋找中間值,持續以上操作,直到找到所在位置為止。
(1)遞迴方法
(2)非遞迴方法
4.選擇排序:
解析:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。
以此類推,直到所有元素均排序完畢。
5.希爾排序:
解析:先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序
6.歸併排序:
解析:歸併排序是一種穩定的排序方法。將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。
7.堆排序:
解析:堆排序(heapsort)是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是
小於(或者大於)它的父節點。
8.計數排序:
解析:計數排序使用乙個額外的陣列c,其中第i個元素是待排序陣列a中值等於i的元素的個數。然後根據陣列c來將a中的元素排到正確的位置。它只能對整數進行排序。
9.桶排序:
解析:假設輸入資料服從均勻分布,將資料分到有限數量的桶裡,每個桶再分別排序(有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排
10.基數排序:
解析:基數排序是按照低位先排序,然後收集;再按照高位排序,然後再收集;依次類推,直到最高位。有時候有些屬性是有優先順序順序的,先按低優先順序排序,再按高優
先級排序。最後的次序就是高優先順序高的在前,高優先順序相同的低優先順序高的在前。基數排序基於分別排序,分別收集,所以是穩定的。
基數排序 vs 計數排序 vs 桶排序
這三種排序演算法都利用了桶的概念,但對桶的使用方法上有明顯差異:
基數排序:根據鍵值的每位數字來分配桶 計數排序:每個桶只儲存單一鍵值 桶排序:每個桶儲存一定範圍的數值
十大排序演算法之氣泡排序
整理下最近學習的演算法,也方便有需要的人檢視 簡單排序 插入排序 選擇排序 氣泡排序 必學 分治排序 快速排序 歸併排序 必學 分配排序 桶排序 基數排序 樹狀排序 堆排序 必學 其他 計數排序 必學 希爾排序 原理 通過比較相鄰的兩個元素的大小實現排序,如果後邊的元素大於前面的元素,那麼就交換元素...
十大排序演算法之氣泡排序
氣泡排序是一種簡單的排序方法。基本的演算法思想就是對要排序的一組資料進行一遍遍的遍歷,每次遍歷都對相鄰的元素進行比較且調整順序,直到這組資料沒有需要調整的地方,排序完成。下面先用文字敘述一下該排序演算法 公升序 1.比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個,從頭一直比到尾,這樣最終,隊尾...
python十大排序演算法 氣泡排序
演算法描述 是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。演算法步驟 比較相鄰的元素。如果第...