Notes 排序演算法小結 Sorting

2021-07-23 01:57:48 字數 1404 閱讀 8682

最近兩天,複習了幾個經典的排序演算法。在這裡,寫乙份小結,粗略回顧。

1)bubble sort

顧名思義,就是把最小的數如冒泡一樣,在每次的遍歷當中,移到最頂的位置。

public void bubblesort(int input)

}swap(input,i,min_index);

} }

分析該排序演算法,比較的次數同樣是(n-1)+(n-2)+...+1=o(n^2)。交換的次數在最壞的情況下是o(n)。

3)insertion sort

插入排序就如整理撲克牌一樣,把一張牌直接在一堆排中,找乙個位置,使得在這個位置之後的都比這張牌大,在這位置前的都比這張牌小。但我們需要注意的是,這裡的插入是指插入到已經排好序的序列中。一開始,我們假設第一張是已經排好序的。從陣列的第二個元素也就是座標為1的元素開始抽牌插入。

public void insertionsort(int input)else

return return_list; }

private int mergearray(int input1, int input2)

while(j>=0 && k>=0)

return return_array;

}

寫merge演算法的時候,注意合併陣列的填入順序應和掃瞄兩個分陣列的順序一致,且和小於的邏輯一直。上述**採用大於的邏輯來寫,反方向寫入。

分析:歸併排序是第乙個空間複雜度是o(n+log2(n))的演算法,需要另外開闢儲存空間。其中n是開闢的儲存結果的陣列,而log2(n)是由於遞迴時需要開闢的棧空間。演算法的時間複雜度可以根據呼叫次數統計。如上述例子,4個長度的陣列,需要呼叫:(0,1) --> (0,0)/ (1,1); (2,3) --> (2,2),(3,3). 再加上總的:(0,4)。總共是7次。為n*log2(n) - 1次。所以複雜度為o(nlog2(n))。(書上的解釋是,所有元素掃瞄一次需要n,接著合併的時候,根據完全二叉樹深度可知,歸併排序需要進行log2(n)次)。

5)quicksort

快速排序基於乙個不斷找軸值,使得軸值左邊的數小於軸值,軸值右邊的數要大於軸值。但兩邊各自的數不要求有序。在不停地遞迴當中,直到軸值begin和pivot相等、 pivot + 1和end相等。這樣就確保所有的數字有序。

public void quicksort(int input, int begin, int end)else }

private int partition(int input, int begin, int end)

if(begin= input[begin])

if(begin

分析快速排序可知,其演算法複雜度是o(nlog2(n))。空間複雜度是:o(log2(n))。因為採用了遞迴。

sort的入門級notes

段首依舊複製 嗯,受人所託,順便整理的 英文渣侵刪。注釋的部分是解說 廢話 和不怎麼重 k o 要 ch 的 錯誤請指正 大晚上的先寫原理 氣泡排序 冒泡是對此排序形象的比喻 甚至非相關專業的同學也能對這種排序有十分直觀的認識 大概就是數越大,代表的泡泡越大,浮力越大,當與其他較小的泡泡相遇時,更容...

sort排序演算法集合

public class sort quicksortarray array 氣泡排序 效率 o n 適用於排序小列表 private static void bubblesortarray int array println array 選擇排序 效率 o n 適用於排序小列表 private s...

STL(排序演算法sort)

標頭檔案 include 1.對基本型別的陣列從小到大排序 sort 陣列名 n1,陣列名 n2 n1和n2都是int型別的表示式,可以包含變數 如果n1 0,則 n1可以不寫 將陣列中下標範圍為 n1,n2 的元素從小到大排序 如 int a sort a,a 7 對整個陣列從小到大排序 int ...