歸併排序利用分治的思想進行排序,採用遞迴形式進行排序;
舉個栗子:
給乙個五個元素的陣列,下標從0到4;
把其分為兩個部分:0,1,2和3,4 。 兩個部分都有序了再合併;
0,1,2再分為兩個部分0,1和2 。兩個部分都有序了再合併;
比較0,1,的大小使其有序,2是乙個數字,也有序,將這兩個有序的合為乙個有序的;這樣0,1,2有序
比較3,4的大小使其有序,這樣0,1,2與3,4都有序,再合併;
總結:歸併排序分為以下幾個步驟:
1:劃分;
2:合併;
將其不斷地重複;
引用百科的一張圖:
下面在**中分析:
#includeusing namespace std;
const int m=1000;
int temp[m];//用於合併的陣列
void merge(int *a,int left,int mid,int right){ // 合併函式
int low=left,high=mid+1;
int x=0;
while(low<=mid && high<=right){ //比較兩個有序段中元素大小,小的先加入,直至乙個有序段比較完
if(a[low]執行截圖:
即輸出段的輸出
演算法導論學習 歸併排序
前面看完了插入排序和插入排序後面習題裡面的選擇排序,最近又把歸併排序給看了。插入排序的最壞情況為n平方,當然選擇排序的恒為n平法,而歸併排序則是乙個nlogn的時間複雜度。當然這指的是在n無限大的情況下才可以成立,對於元素個數很小的,插入排序反而會快一些。歸併排序的主要思想就是利用了分治法把大的問題...
演算法導論 歸併排序
public class mergesort mergesort data,0,中間 mergesort data,中間,最後 merge data,0,最後 system.out.println 排序前 for int i 0 i9 i 10 0 system.out.println system...
演算法導論 歸併排序
演算法的設計有很多思想,之前的插入排序使用的是增量的方法,即在排好的子陣列a中,將元素a j 插入,形成新的子陣列a。這次將實現另一種排序 歸併排序,歸併排序採用了 分治法 divide and conquer 本篇中包含 分治法,也可以稱為分治策略 是將乙個大規模的問題 原問題 劃分成n個規模較小...