基礎排序演算法複習

2021-07-16 10:43:49 字數 1010 閱讀 6950

1.計數排序

計數排序的四個步驟:

a.初始化c[0…k]為0;

b.對於每個元素a[i], c[ a[i] ]++,c記錄a中各個元素出現的次數,比如中,c[1] = 2, c[2] = 0, c[3] = 1;

c.對於i=1 to k, c[i] = c[i] + c[i-1],此時c記錄小於等於i的元素的個數,c[1] = 2, c[2] = 2, c[3] = 3;

d.按照計數結果存放元素到b中:對i = n-1 to 0,b[ c[ a[i] ] ] = a[i], c[ a[i] ]–;

最後一步稍複雜,首先,採用倒序,可以使得程式較為穩定,在處理相等元素時,不用將元素位置換來換去,a[i]指的是第i個元素,c[a[i]]記錄元素值小於等於a[i]的個數,b[ c[ a[i] ]]則表示把元素a[i]排在了它應當在的位置.

**如下:

void countingsort(int *a, int *b, int array_size, int k)

for (i = 0; i< array_size; i++)

for (i = 1; i <= k; i++)

for (i = array_size - 1; i >= 0; i--)

}

2.選擇排序

選擇排序的演算法比較簡單,每次只要找到未排序序列中的最小值與當前位置的元素交換即可,在寫演算法的時候要注意邊界。選擇排序的時間複雜度為o(n^2),並且是不穩定的排序演算法。

**如下:

void selectsort(int r,int n) }}

}

3.氣泡排序:

氣泡排序演算法應該時最簡單的一種排序演算法,但是時間複雜度也比較高,為o(n^2),每次只要將最大或最小元素排在最右邊即可。

**:

void bubblesort(int r, int n) }}

}

有關基數排序,這篇文章值得學習。

基礎演算法複習 快速排序

1.最近一直在忙課程,每天只能抽空刷幾道leetcode,好久沒看js了.有點慌,但是先抽空把排序演算法啥的寫一遍吧,等忙完作業系統課設再好好複習js.2.快速排序演算法思想大概就是設定乙個基準值,根據基準值不斷地交換陣列中前後的元素值,在此過程中目的是把基準值排序到最終的位置,再對基準值位置之前和...

基礎複習 內排序 查詢演算法

內排序void mkarr int arr,int size void checksorted int arr,int size,int flag else printf all right n 1.插入排序 假設陣列的前i個數已經排好序,然後將第i 1個數插入到前i個中,只到n個數都插入到自己的位...

排序演算法複習

參考自 直接插入排序 從小到大排列 n個資料,第乙個資料平凡有序 假設前i 1個資料串有序,根據第i個的大小將第i個插入到此串中,則前i個的資料串也有序。因此可得到n個資料有序。插入方法 待插入元素為第i元素,數值存為temp,將 i 之前的元素 j 從第 i 1 元素開始與之比較 如果比temp大...