氣泡排序(穩定)
依次比較兩個相鄰的元素,把大的換到後面,一次迴圈完成後的結果是,最大的數字排在最後。重複以上步驟(除了最後乙個),直到排完。
void
bubble_sort
(vector<
int>
&nums)
}}
選擇排序
void
select_sort
(vector<
int>
&nums)
swap
(nums[i]
,nums[temp]);
}}
插入排序
void
insert_sort
(vector<
int>
&nums)
nums[j]
=temp;
}}
void
insert_sort
(vector<
int>
&nums)
for(
int j=i;j>=pre+
1;j--
) nums[j]
=nums[j-1]
; nums[pre]
=temp;
}}
快速排序
partition方法
public static
intpartition
(int
array,
int lo,
int hi)
swap
(array,lo,j)
;return j;
}
利用swap()函式,必須要將大於key寫在前面,小於key寫在後面,這樣才能夠保證,當退出裡賣弄第一while迴圈的是,當前的j一定指向小於key值的數,這樣最後才能將該值與key值交換。
希爾排序
即縮小增量排序,把所有的數按照一定的增量分組插入排序,減小增量重複上述動作,直到增量為1結束。
void
shellsort
(int array)
array[j+step]
=temp;
//最後將這個臨時變數放在對應位置}}
}
歸併排序
歸併排序,是建立在歸併操作上的一種有效的排序演算法該演算法是採用分治法(divide and conquer)的乙個非常典型的應用,且各層分治遞迴可以同時進行。
1.迭代實現:
實現原理:
①申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列
②設定兩個指標,最初位置分別為兩個已經排序序列的起始位置
③比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置
④重複步驟③直到某一指標到達序列尾
⑤將另一串行剩下的所有元素直接複製到合併序列尾
void
merge_sort
(vector<
int>
&nums)
else
if(nums[start1]
>=nums[start2])}
while
(start1while
(start2}for
(int i=
0;i) nums[i]
=result[i];}
}
2.遞迴實現
假設序列共有n個元素
①將序列每相鄰兩個數字進行歸併操作,形成floor(n/2)個序列,排序後每個序列包含兩個元素。
②將上述序列再次歸併,形成floor(n/4)個序列,每個序列包含四個元素
③重複步驟②,直到所有元素排序完畢
**:
void
merge_sort
(vector<
int>
&nums,
int*result,
int start,
int end)
else
if(nums[start1]
>nums[start2])}
while
(start1while
(start2for(
int i=start;i<=end;i++
) nums[i]
=result[i]
;}
參考文獻:
1 2
3
經典排序演算法總結
排序演算法是離散數學和資料結構學科最基本的演算法,雖然知道這些排序演算法的名字,但是一直沒有研究過它們的實現原理。現在把它們收集起來,並一一親自實現,來加深對排序演算法的理解。1,氣泡排序 最簡單的排序演算法,從第乙個元素開始比較相鄰元素大小,如果前邊元素大於後邊元素則交換位置,否則將下標移到下乙個...
經典排序演算法總結
插入排序 選擇排序 歸併排序 排序方法 平均情況 最好最差 空間複雜度 穩定性氣泡排序o n2 o n 2 o n o n o n2 o n 2 o 1 o 1 穩定快速排序o nlogn o nlog n o nlogn o nlog n o n2 o n 2 o nlogn o nlog n 不...
經典的各類排序總結
1.插入排序 實現原始碼 void insertsort int arr,unsigned int len unsigned int i unsigned int j for i 1 i len i arr j 1 x 效能分析 假設需要從小到大進行排序,則插入排序的最壞情形是原來的陣列是按照從大到...