合併排序演算法

2021-09-02 11:51:23 字數 1094 閱讀 9951

合併排序演算法就是將多個有序資料表合併成乙個有序資料表。如果參與合併的只有兩個有序表,則稱為二路合併。

排序流程:

原始資料: 67 65 77 38 97 3 33 49 34

第一遍: 65 67 38 77 3 79 33 49 34

第二遍: 38 65 67 77 3 33 49 97 34

第三遍: 3 33 38 49 65 67 77 97 34

第四遍: 3 33 34 38 49 65 67 77 97

public class mergesort

//相鄰有序段合併

k=s;

i=s;

j=s+len;

while(ielse

}while(iwhile(j<=e)

s=e+1; //下一對有序段中左段的開始下標

}if(sstatic void mergesort(int a,int n) //合併排序

int p=new int[n];

while(lenelse

len=len*2; //增加有序序列長度

f=1-f; //使f值在0和1之間切換

count++;

system.out.printf("第"+count+"步排序結果:"); //輸出每步排序的結果

for(h=0;hsystem.out.print("\n");

}if(f==1) //如果進行了排序

}// free(p); //釋放記憶體

}public static void main(string args)

system.out.print("排序前的陣列為:\n"); //輸出排序前的陣列

for(i=0;isystem.out.print("\n");

mergesort(shuzu,size); //排序操作

system.out.print("排序後的陣列為:\n");

for(i=0;isystem.out.print("\n");}}

合併排序演算法

陣列ary的m個元素,ary p ary q ary q 1 ary r 已按曾序排序 使得ary p ary r 按曾序排列 void clibrary merge int ary,int p,int q,int r,int m else k 0 for i p i r i ary i bp k ...

合併排序演算法

主要思想 不斷將已經有序的子陣列a p.q 和a q 1.r 合併為新的有序的陣列a p.r 具體過程可如下操作 分解 將n個元素分成各含n 2個元素的子串行 解決 對兩個子陣列遞迴地排序 合併 合併兩個已經有序的子陣列得到最終的有序陣列。合併 歸併排序 分治策略 include include u...

合併排序演算法

合併排序是用分治策略實現的排序演算法之一。基本思想是 將待排序的元素分成大小大致相同的兩個子集合,分別對這兩個子集合進行排序,最後將排好序的子集合合併成所需要的集合。此方法的時間複雜度t n o nlogn 這種排序方法漸進最優演算法。合併排序 遞迴 include using namespace ...