資料結構中常見排序演算法複習

2021-10-23 08:16:36 字數 2393 閱讀 2355

思想:從前往後遍歷,每次把未排序陣列中最大的元素交換到陣列最後。

**實現:2個for迴圈,第乙個迴圈表示冒泡次數,第二個迴圈從前往後遍歷未排序陣列,如果前面的元素大於後面的元素,交換,直至到達已排序部分的最前面

void

bubblesort

(int a,

int left,

int right)}}

}

快速排序也是通過比較交換元素達到最終陣列有序,快速排序比氣泡排序快在其使用了分治的方法。

通常以第乙個元素為軸,使用雙指標遍歷陣列,指標i

ii從前向後與軸元素對比,指標j

jj從後向前與軸元素對比。

如果指標i

ii的元素大於軸元素,指標j

jj的元素小於軸元素,交換;最後交換軸元素到指標i

ii和指標j

jj的交匯點。

這樣一趟掃瞄之後,軸元素左邊的元素都小於軸元素,右邊的元素都大於軸元素,繼續分治。

void

quicksort

(int a,

int left,

int right)

} a[left]

= a[i]

; a[i]

= base;

quicksort

(a, left, i-1)

;quicksort

(a, i+

1, right)

;}

思想:對於未排序部分[i,

n]

[i,n]

[i,n

],選擇最小的元素與a[i

]a[i]

a[i]

交換;這樣,每次掃瞄,前面的已排序部分長度加一。

void

insertsort

(int a,

int left,

int right)

a[j]

= temp;

}}

什麼是堆?完全二叉樹,結點的值大於其左右子樹的值。

如果結點的值小於左子樹或者右子樹的值怎麼辦?把左右子樹中較大的值和結點的值交換。交換後還要判斷換下來的值是否還是小於其左子樹或者右子樹,如果是,繼續交換。

這一操作即下面的**中的sif

t(

)sift()

sift()

函式什麼是堆排序呢?因為堆的性質,最大的結點肯定是根節點,把根節點交換到陣列最後,這個時候最後的結點到了根節點,堆被破壞了,對未排序陣列重新sif

t(

)sift()

sift()

,再把根節點與未排序陣列(即堆)的最後結點交換,直至整個陣列有序。

另外,堆是二叉樹,但是用陣列實現正好可以利用完全二叉樹的性質:當前結點的下標為i

ii,左孩子結點的下標為2∗i

2*i2∗

i,右孩子結點的下標為2∗i

+1

2*i+1

2∗i+

1

void

sift

(int a,

int k,

int m)

if(a[i]

> a[t]

)break

;int temp = a[i]

; a[i]

= a[t]

; a[t]

= temp;

i = t;

left =

2* i;}}

void

heapsort

(int a,

int left,

int right)

for(

int i =

0; i < right-left; i++

)}

思想:將要插入的元素(陣列中未排序的元素)從後向前與被插入陣列(已有序陣列)中的元素比較,如果比當前元素小,陣列元素右移;直至找到插入位置。

void

insertsort

(int a,

int left,

int right)

a[j]

= temp;

}}

插入排序的一種,選取乙個增量d,陣列元素對於增量d進行直接插入排序,增量d不斷減小至1;這時整個陣列有序。

通常增量d選取陣列長度一半,折半減少。

void

shellsort

(int a,

int left,

int right)

a[j]

= temp;}}

}

以上排序演算法只是簡要介紹了實現方法,關於時間複雜度等問題並沒有討論。水平有限,有不當之處歡迎批評指正。

資料結構 資料結構中常用的排序演算法

排序是資料結構中重要的內容,也是面試過程中經常涉及的部分。在這裡,我給出幾個基本的排序演算法的c c 對於具體的排序的原理,不做太多的介紹,隨便找一本資料結構教材都能弄清楚。宣告 1 以下給出的 並沒有判斷邊界條件,只是給出了演算法的核心 如果遇到具體的問題,應該加以判斷。2 演算法實現的是公升序排...

複習資料結構 排序演算法(二) 氣泡排序

這篇複習氣泡排序。氣泡排序也是一種穩定排序 內排序。氣泡排序的基本思想 對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即 每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。插入排序比氣泡排序快!上面說的是普通的氣泡排序演算...

資料結構複習 常用排序演算法小結

演算法特點 面試考點 選擇排序演算法準則 比較類,非比較類 平均的時間效能 時間複雜度為 o nlogn 快速排序 堆排序和歸併排序 時間複雜度為 o n 2 直接插入 冒泡和簡單選擇排序 時間複雜度為 o n 基數排序 當待排記錄序列按關鍵字順序有序時 直接插入和氣泡排序 o n 快速排序 o n...