常見排序演算法(冒泡 插入 選擇 遞迴 快排)

2021-10-02 14:11:20 字數 2047 閱讀 8993

/* 改進的話,可以加個標誌, 當某次遍歷沒有交換,則說明陣列已有序,結束; */

void

bubble_sort

(int nums,

int size)}}

return

;}

void

insert_sort

(int nums,

int size)

else

} nums[j+1]

= cur;

}return

;}

void

select_sort

(int nums,

int size)}}

return

;}

// 歸併排序

void

merge

(int a,

int start,

int mid,

int end)

else

}//尾部處理

while

(p1 <= mid)

while

(p2 <= end)

memcpy

(a+start, nums,

sizeof

(int

)*len)

; std:

:cout <<

"a["

<< start <<

"..."

<< end <<

"]: "

;for

(int j =

0; j++j)

std:

:cout << std:

:endl;

free

(nums)

;return;}

void

merge_sort_c

(int a,

int start,

int end)

void

merge_sort

(int a,

int length)

//快排

/* 選擇乙個數mid分割陣列。

*/int

split_opt

(int nums,

int start,

int end)

++j;

}

std:

:cout <<

"nums["

<< start <<

"..."

<< end <<

"] "

<<

"mid "

<< mid <<

" : "

;for

(int k=start; k<=end;

++k)

std:

:cout << std:

:endl;

return i-1;

}void

quick_sort_c

(int nums,

int start,

int end)

void

quick_sort

(int nums,

int length)

排序演算法

時間複雜度(最好/平均/最壞)

空間複雜度

穩定度冒泡

o(n) / o(n*n) / o(n*n)

o(1)

穩定插入

o(n) / o(n*n) / o(n*n)

o(1)

穩定選擇

o(n*n) / o(n*n) / o(n*n)

o(1)

不穩定歸併排序

始終是 o(nlogn)

o(n)

穩定快速排序

o(nlogn)/o(nlogn)/o(n*n)

o(1)

不穩定

排序演算法 插入 選擇 冒泡 快排 歸併

可以找一些帖子理解下幾類排序演算法或者聽下陳越姥姥在mooc上的資料結構 選擇類排序 交換類排序 歸併排序 基數排序 拓撲排序 從待排序的n個記錄中的第二個記錄開始,依次與前面的記錄比較並尋找插入的位置,每次外迴圈結束後,將當前的數插入到合適的位置。void sort insert int a,in...

演算法 插入選擇氣泡排序

演算法 排序 n 2 時間複雜度是o n 2 的排序有插入,選擇,冒泡。由於演算法思想比較簡單易懂,也不複雜。我們就簡單講講。插入排序 乙個元素是有序的,從第二個元素開始,依次將每個元素插入到前面序列的對應位置,最終整個序列有序。外層n 1趟。void insertsort int a,int n ...

排序演算法 冒泡 插入 選擇排序

分析排序演算法從下列3個方面進行 排序演算法執行效率 時間複雜度 1 最好情況下時間複雜度 2 最壞情況下時間複雜度 3 平均情況時間複雜度 排序演算法記憶體消耗 空間複雜度,其中原地排序特指空間複雜度為o 1 的排序演算法 排序演算法穩定性 1 穩定的排序演算法 待排序的序列中存在值相等的元素,經...