資料結構 排序

2021-10-09 17:02:58 字數 1769 閱讀 4971

一選擇排序

從運算時間上看,在第一趟排序中關鍵字的比較次數為 n-1 次,在第二趟排序中關鍵字的比 較次數為 n-2次,依此類推,在第 i趟排序中關鍵字的比較次數為 n-i次,所以總比較次數為:

比較次數=n(n-1)/2

理論上,在一趟排序中,記錄的交換次數最好情況下(元素已經排好序)為 0 次,最壞情況 下(每個元素都不在最終位置上)為 n-1 次。所以綜合分析演算法的比較和交換次數,可以知道, 選擇排序演算法無論是最好還是最壞情況,時間複雜度都為 o(n2),因為至少總的比較次數是平方級 的。這個級別的時間複雜度在各種排序演算法中是很慢的,所以在實際應用中不會使用選擇排序算 法來解決工程問題。 選擇排序在進行資料交換時只需要乙個單位的臨時空間,故其空間複雜度為 o(1)。

從前面的分析中可以知道選擇排序演算法是不穩定的。

二氣泡排序/雞尾酒排序

氣泡排序的效率與排序前元素的次序有關,若排序前元素為正序,則氣泡排序只需要一趟排 序,在排序過程中進行 n-1 次比較,並且不需要移動元素,此時的時間複雜度是 o(n);但是,若 排序前元素為完全逆序,則氣泡排序需要進行 n-1 趟排序,共需要進行 n(n-1)/2 次比較,並且需 要 n(n-1)/2 次元素交換,此時的時間複雜度是 o(n2),平均情況下的時間複雜度為 o(n2)。 在演算法執行過程中,只在元素交換時需要乙個單元的臨時空間,故空間複雜度是 o(1)。

氣泡排序是穩定的。

三插入排序

向有序序列中逐個插入元素的操作,進行了 n-1 趟,每趟操作分為比較元素和移動元素,而 比較的次數和移動的次數取決於待排序列的初始排列。 最好情況(已經排好序)下:每趟操作只需 1 次比較 0 次移動。總比較次數為 n-1,總移動 次數為 0。 最壞情況(完全逆序)下:第 j 趟操作,待插入元素經過 1 次比較比最小元素小,移動元素 的次數為 j 次,總移動次數大約為 n2/2。平均情況下:第 j 趟操作,待插入元素大約同前面的 j/2 個元素進行比較,移動元素的次數為 j/2-1次,總比較次數和總移動次數大約為 n2/4。直接 插入排序的時間複雜度為 o(n2)。 在排序過程中只使用了乙個用於暫存待插入的元素,故空間複雜度為 o(1)。 插入排序是一種穩定排序演算法。 插入排序演算法適用於鍊錶。

四堆排序

如果要採用堆排序,需要先構建堆,然後再進行堆排序,構建堆和堆排 序的時間複雜度均為 o(nlogn),兩個演算法依次執行,總的時間複雜度仍然是 o(nlogn)。 整個演算法用到了一些臨時變數,其空間複雜度為 o(1)。 堆排序是不穩定的排序演算法。

五快速排序

時間複雜度:在 n 個元素的待排序列中,一次劃分需要約 n 次比較,時效為 o(n)。快速排序 在理想情況下,每次劃分,正好將待排序列分成兩個等長的子串行,則演算法時間複雜度為o(nlogn)。

如果選擇首個元素為基準元素,那麼在原序列有序或逆序的情況下,上述演算法每次劃分只能 將序列分成長度為 1 和 n-1 兩個子串行,這是最壞的情況,整個排序演算法時間複雜度為 o(n2)。 空間複雜度:快速排序是遞迴的,每層遞迴呼叫時的引數均要用棧來存放,遞迴呼叫層次數 在理想情況下空間複雜度為 o(logn);在最壞情況下為 o(n)。

六歸併排序

每次歸併都需要從頭到尾掃瞄一次陣列,所以時間複雜度為 o(nlogn)。 ,歸併排序的空間複雜度為 o(n),是目前介紹的 排序演算法中空間複雜度最高的。歸併排序是穩定演算法。

小結選擇排序、氣泡排序、雞尾酒排序、插入排序都屬於比較 「慢」的排序演算法,平均時間複雜度都是 o(n2)

希爾排序平均 時間複雜度為 o(n1+£),£的值可以接 近於 0.3;

堆排序、快速排序、歸併排序的平均時間複雜度都是 o(nlogn)

桶排序、基數排序和計數排序時間複雜度達到 o(n)

資料結構 排序

小小總結了下 希望別不記得 排序型別 排序方法 平均時間 最壞時間 最好時間 穩定空間 插入直接插入 o n2 o n2 o n 穩定o 1 希爾排序 o n3 2 增量序列最後為1,只有公因子1 不穩o 1 選擇簡單選擇 o n2 o n2 o n 穩定o 1 堆排序o n lb n o n lb...

資料結構 排序

郝斌版 資料結構 學習筆記 冒泡 公升序,12比,大放後面,再23比,直至最大的在最後面 插入 2,3,4,依次插入值,保證插入值後的序列為有序的 選擇 後面所有的最小值依次排到最前 快速排序 歸併排序 22排,44排,88排.排序演算法標準 時間,空間,穩定性 排序和查詢的關係 排序是查詢的前提,...

資料結構 排序

1.希爾排序 shellsort 增量序列d n為要排序數的個數 void shellinsertsort int a,int n,int dk n個要排序的數,dk是增量 2 堆排序 已知h s m 除了h s 外均滿足堆的定義 調整h s 使其成為大頂堆.即將對第s個結點為根的子樹篩選,para...