相關概念
1、穩定排序(stable sort)和非穩定排序
穩定排序是指所有相等的數經過某種排序演算法操作後仍然能保持它們在排序之前的相對次序。反之就是非穩定排序。
2、內排序(internal sorting)和外排序(external sorting)
在排序過程中,所有需要排序的數都在記憶體,並在記憶體中調整它們的儲存順序,稱為內排序;在排序過程中,只有部分數被調入記憶體,並借助記憶體調整數在外存中的存放順序排序方法稱為外排序。
排序演算法
【氣泡排序】(bubble sort)
氣泡排序方法是最簡單的排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的「氣泡」,較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個「氣泡」序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。如果發現兩個相鄰元素的順序不對,即「輕」的元素在下面,就交換它們的位置。顯然,處理一遍之後,「最輕」的元素就浮到了最高位置;處理二遍之後,「次輕」的元素就浮到了次高位置。在作第二遍處理時,由於最高位置上的元素已是「最輕」元素,所以不必檢查。一般地,第i遍處理時,不必檢查第i高位置以上的元素,因為經過前面i-1遍的處理,它們已正確地排好序。
氣泡排序是穩定的。演算法時間複雜度是o(n2)。
【選擇排序】(selection sort)
選擇排序的基本思想是對待排序的記錄序列進行n-1遍的處理,第 i 遍處理是將[i..n]中最小者與位置 i 交換位置。這樣,經過 i 遍處理之後,前 i 個記錄的位置已經是正確的了。
選擇排序是不穩定的。演算法複雜度是o(n2 )。
【插入排序】(insertion sort)
插入排序的基本思想是,經過i-1遍處理後,l[1..i-1]己排好序。第i遍處理僅將l插入l[1..i-1]的適當位置,使得l[1..i]又是排好序的序列。要達到這個目的,我們可以用順序比較的方法。首先比較l和l[i-1],如果l[i-1]≤ l,則l[1..i]已排好序,第i遍處理就結束了;否則交換l與l[i-1]的位置,繼續比較l[i-1]和l[i-2],直到找到某乙個位置j(1≤j≤i-1),使得l[j] ≤l[j+1]時為止。
直接插入排序是穩定的。演算法時間複雜度是o(n2)
【堆排序】(heap sort)
堆排序是一種樹形選擇排序,在排序過程中,將a[n]看成是完全二叉樹的順序儲存結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關係來選擇最小的元素。
堆排序是不穩定的。演算法時間複雜度o(nlog2n)。
【歸併排序】(merge sort)
歸併(merge)排序法是將兩個(或兩個以上)有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。
歸併排序是穩定的。其時間複雜度無論是在最好情況下還是在最壞情況下均是o(nlog2n)。
【快速排序】(quick sort)
快速排序是對氣泡排序的一種本質改進。它的基本思想是通過一趟掃瞄後,使得排序序列的長度能大幅度地減少。在氣泡排序中,一次掃瞄只能確保最大數值的數移到正確位置,而待排序序列的長度可能只減少1。快速排序通過一趟掃瞄,就能確保某個數(以它為基準點吧)的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有乙個元素為止。
快速排序是不穩定的。最理想情況演算法時間複雜度o(nlog2n),最壞o(n ^2)。
各排序方法對比
氣泡排序演算法時間複雜度是o(n^2)
選擇排序演算法時間複雜度是o(n^2)
插入排序演算法時間複雜度是o(n^2)
快速排序是不穩定的。最理想情況演算法時間複雜度o(nlog2n),最壞o(n^2)。
堆排序演算法時間複雜度是o(nlogn)
歸併排序演算法時間複雜度是o(nlogn)
資料結構 演算法複雜度
二 演算法的效能評價 三 真題解析 資料結構的第一章 緒論 包含的最後乙個重要內容是關於演算法的複雜度。這個考點一般會單獨出現在選擇題的前兩道,需要你熟練掌握演算法的基本概念 演算法時間複雜度和空間複雜度的分析判斷等。其次,還會出現在大題的程式設計部分,將演算法複雜度作為乙個限制條件,要求你給出滿足...
常見排序演算法複雜度
相關概念 1 穩定排序 stable sort 和非穩定排序 穩定排序是指所有相等的數經過某種排序演算法操作後仍然能保持它們在排序之前的相對次序。反之就是非穩定排序。2 內排序 internal sorting 和外排序 external sorting 在排序過程中,所有需要排序的數都在記憶體,並...
資料結構之演算法複雜度
解決特定問題求解步驟的描述。在計算機中表現為指令的有限序列,每條指令可表示乙個或多個操作。此外,乙個演算法還具有下列5個特性 有窮性,確定性,可行性,輸入,輸出。演算法設計的要求 正確性,可讀性,健壯性,效率與低儲存量需求。what?時間複雜度和空間複雜度 why?可以用度量演算法的好與壞 how?...