幾種排序演算法的實現與比較 c 容器

2021-06-22 08:38:00 字數 2912 閱讀 6497

description:使用插入排序將容器內數進行排序

idea:

1.從容器中取數,每次都把取到的數插入到正確到位置。

q&a:

1.q:當拿到乙個數a時,如何將這個數插入到正確的位置?

a:將a與已經插入到所有數進行比較,找到第乙個比a大到數字置,在這個數到前面插入之;

2.q:如何判斷已經排完序,即結束條件是什麼?

a:當所有到數都插入時,即取數陣列到元素為空,即結束,可以設定乙個計數器count;

input:未排序的陣列

output:字典排序的陣列

data structure:使用容器存放陣列,利用迭代器進行遍歷,函式傳遞迭代器,返回排好序容器到迭代器;

complexity:o(n^2)

//傳遞迭代器

void insert_sort(iter first, iter last)}}

}//傳遞容器

description:利用歸併遞迴到思想,進行陣列到字典排序;

idea:

1.將問題逐步細化,進行遞迴求解.

q&a:

1.q:遞迴終止條件是什麼?

a:當要分割的數的數目為1時;

2.q:merge函式如何實現?

a:函式原型:merge(iter val_it,iter res_it,int start,int first_end,int end);其中引數val為待歸併到

容器的迭代器,rel為歸併後儲存資料容器的迭代器,start為第乙個歸併集合與val間的距離,相當於

(val+start)為歸併資料的起始位置,同理(val+first_end)為第乙個集合到最後乙個元素,

(val+first_end+1)為第二個集合的起始位置,(val+end)為第二個集合最後乙個元素。

input:未排序的陣列

output:字典排序的陣列

data structure:

1.使用容器存放陣列,利用迭代器進行遍歷,函式傳遞迭代器,返回排好序容器的迭代器;

2.原始排序陣列存放在value容器中,歸併時到資料儲存在result容器中。

complexity:(nlogn)

void merge_sort(vec &v,int start,int end)

}//按序歸併兩個容器

description:利用快排分治的思想將n個數排序。

idea:

1.給定乙個陣列,選定乙個基軸,假定每次選定第乙個數為基軸,則從最後乙個數進行掃瞄,找到第一

個小於基軸的數,並放入基軸位置,此時得到乙個空位置,然後從基軸下乙個位置掃瞄,找到第乙個

大於基軸的數。之後每次都以此方向掃瞄,並從上次掃瞄的下一位置掃瞄。此函式記為partition().

2.基準位置確定後,在分別在其兩端再次呼叫partition()函式。

q&a:

1.q:partition函式什麼時候結束?

a:從左和從右掃瞄的計數器相等時結束。

input:未排序的陣列

output:字典排序的陣列

data structure:使用容器存放陣列,利用迭代器進行遍歷,函式傳遞迭代器,返回排好序容器到迭代器;

幾種排序演算法的實現與比較

排序演算法比較 利用隨機函式產生n個隨機整數,利用直接插入排序 折半插入排序,起泡排序 快速排序 選擇排序 堆排序,基數排序七種排序方法進行排序 結果為由小到大的順序 並比較次數和交換次數。這裡是源 include using namespace std include include includ...

幾種排序演算法的實現和比較

穩定性 穩定 最壞時間複雜度o n 2 最好時間複雜度o n 平均時間複雜度o n 2 void bubble sort int a,int n if flag break 穩定性 穩定 平均時間複雜度o n 2 最壞時間複雜度o n 2 最好時間複雜度o n void insert sort in...

幾種排序演算法比較

資料結構 10 排序十 四 排序 sort thinking in algorithm 12.詳解十一種排序演算法 排序法平均時間 最差情形 穩定度額外空間 備註冒泡 o n2 o n2 穩定o 1 n小時較好 交換o n2 o n2 不穩定o 1 n小時較好 選擇o n2 o n2 不穩定o 1 ...