十大排序演算法簡潔實現 C

2021-10-22 08:38:29 字數 2907 閱讀 4400

記錄下十大排序演算法的核心及改進。

不穩定排序:快選擇謝爾頓。(快速、選擇、希爾、堆)

演算法分類:

2. 插入排序

3. 選擇排序

4. 歸併排序

二、非比較排序

for

(int i =

0; i < len -

1; i++

)}

簡單版,但如果最左邊的元素是最大值或最小值就會是最壞時間複雜度。

//一開始left = 0, right = len - 1;

void

quicksort

(int left,

int right,

float

&arr)

swap

(arr[i]

, arr[left]);

quicksort

(left, i -

1, arr)

;quicksort

(i +

1, right, arr)

;}

改進

//三值取中法

void

quicksort

(int left,

int right,

float

&arr)

swap

(arr[i]

, arr[left]);

quicksort

(left, i -

1, arr)

;quicksort

(i +

1, right, arr)

;}

int

main()

//測試

;quicksort(0

, arr.

size()

-1, arr)

;for

(int i =

0; i < arr.

size()

; i++

) cout<

<<

" ";

return0;

}

第一種:

int j, k;

for(

int i =

1; i < len; i++

) arr[j +1]

= k;

//把k填進去

}

第二種:

for

(int i =

0; i < len; i++

)}

當d = 1時,最後一次排序可以視為插入排序。

int i, j, d, temp, n = arr.

size()

; d = n /2;

//設定增量

while

(d >0)

//邊界條件

arr[j + d]

= temp;

} d = d /2;

//減小增量

}

參考:

for

(int i =

0; i < len -

1; i++

)}

void

heapadjust

(vector<

int>

& arr,

int k,

int end)}}

void

heapsort

(vector<

int>

&arr,

int len)

}

覺得太複雜的話應先從mergesort函式看起,然後再看merge函式。

void

merge

(int left,

int mid,

int right, vector<

int>

&arr)

delete

temp;

}void

mergesort

(int left,

int right, vector<

int>

&arr)

else

if(left == right)

return

;int mid =

(left + right)/2

;//找中點

mergesort

(left, mid, arr)

;//開始分組遞迴

mergesort

(mid +

1, right, arr)

;merge

(left, mid, right, arr)

;//排序

}

int

main()

//測試

;mergesort(0

, arr.

size()

-1, arr)

;for

(int i =

0; i < arr.

size()

; i++

) cout<

<<

" ";

return0;

}

十大排序演算法(C 實現)

排序演算法 平均時間複雜度最好情況最壞情況空間複雜度穩定性 氣泡排序 o n o n o n o 1 穩定選擇排序 o n o n o n o 1 不穩定插入排序 o n o n o n o 1 穩定希爾排序 o nlogn o o n o 1 不穩定歸併排序 o nlogn o nlogn o n...

十大排序演算法 C 實現

include stdafx.h include include include using namespace std 1氣泡排序 void bubblesort vector int v 2選擇排序 void seletionsort vector int v 3插入排序 void insert...

十大排序演算法(c )

1.氣泡排序 每一輪都從頭開始比較,比較當前數與後一位數,若當前數大於後一位數則進行交換,每一輪都會在末尾得到一位排序正確的數,因此每一輪比較結束,下一輪的比較範圍將縮小 ja j 1 if ischange break 2.插入排序 每一輪將當前數 a i 插入到前面已經排序好的合適位置,因此關鍵...