歸併排序 演算法導論學習

2021-08-11 14:34:47 字數 961 閱讀 3419

歸併排序利用分治的思想進行排序,採用遞迴形式進行排序;

舉個栗子:

給乙個五個元素的陣列,下標從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個規模較小...