交換類排序的思想,顧名思義,就是在每一輪的排序過程,通過不斷的交換來使每個元素到達最終的位置。常見的兩種交換類排序有氣泡排序和快速排序。
氣泡排序作為最基礎的排序演算法,它的排序思想也如其名,通過比較兩個相鄰資料的大小,來決定是否交換它們的位置,最後經過多輪排序最終是整個序列有序。
網上找到的gif**:
}分析:
從**中可以看出最內層的交換操作可以看做是基本操作。
注意排序的結束條件是flag==0,就是在一趟排序中沒有發生交換,所以氣泡排序的排序趟數跟原始序列有關。
時間複雜度:當內層if語句始終成立時,也就是序列正好是逆序時,需要執行n(n-1)/2次,所以時間複雜度是
當內層if語句不執行時,也就是序列是是有序的時候,也就是需要遍歷一次,時間複雜度是
所以綜合上,平均時間複雜度就是
空間複雜度:從**中就可以看出,整個排序過程只需要乙個temp變數來輔助,所以空間複雜度是
快速排序也是一種交換類的排序演算法,它的思想就是每一輪先選擇當前序列中的乙個關鍵字(通常是序列中的第乙個)作為樞紐,然後從序列中從前往後找到乙個比它大(小)的資料,再從後往前找到乙個比它小(大)的資料,然後交換它們的位置,直到它們相遇,相遇的位置即是樞紐的位置,同時也將樞紐左邊都是比它小(大)的,右邊都是比它大(小)的,然後再通過遞迴來對子序列進行排序。
if(i分析:
時間複雜度:快速排序最好情況(每次劃分都是均勻劃分)的時間複雜度是
最壞的情況(待排序的序列是正序或者逆序時),複雜度是
平均時間複雜度就是
對時間複雜度的具體分析以後填。
空間複雜度:從**中可以看出,快排是通過遞迴實現的,需要棧的輔助,空間複雜度是
另外,快排的排序數和初始序列有關,序列越無序,效率越高;越接近無序,效率越低。
ref:《2019資料結構高分筆記》(天勤版本)
常見的演算法排序之交換類排序
1.快速排序 基本實現方法 經過一次排序演算法之後,先簡單的將資料分為兩部分,取乙個中間數 一般為第乙個元素 以這個中間數為中心,左邊的數為比這個數小的數,右邊的數為比這個數大的數。之後再進行遞迴演算法,分別處理已經分好的以中間數為分界的左右兩堆資料。直到找到我們想要的排好序的陣列。基本方法步驟 1...
排序演算法之交換排序
交換排基本思想 兩兩比較待排序元素的關鍵字,發現兩個元素的次序相反時即進行交換,知道沒有反序的元素為止。本節介紹兩種交換排序,即氣泡排序和快速排序。氣泡排序 每次只能和相鄰的位置數進行交換,效率低 include int a 100 void quicksort int left,int right...
排序演算法之交換排序
交換,就是根據序列中兩個元素關鍵字的比較結果來對換這兩個記錄在序列中的位置。基於交換的排序 演算法有很多。以氣泡排序和快速排序舉例。氣泡排序 public static int bubblesort int array return newarray 穩定性 氣泡排序是乙個穩定的排序方法。氣泡排序中...