/* 改進的話,可以加個標誌, 當某次遍歷沒有交換,則說明陣列已有序,結束; */
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 穩定的排序演算法 待排序的序列中存在值相等的元素,經...