java排序演算法 歸併排序

2021-06-26 19:56:21 字數 1626 閱讀 1208

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(

divideand conquer

)的乙個非常典型的應用。

在討論歸併排序演算法之前,先來看乙個小問題,對於兩個有序陣列,如何合併成乙個有序陣列問題。

public

static

voidmerge(intaa,intbb)else

}while(ilength)

while(jlength)

for(intd : cc)

我們再來看歸併排序,空間複雜度o(n),時間複雜度是o(n*對數)

歸併排序的基本思想:

將乙個含有n個序列的有序表看成是n個長度為1的有序表,然後兩兩歸併,得到[n/2]個長度為2的有序表,然後再兩兩歸併,直到得到乙個長度為n的有序表為止。

下面是歸併排序的乙個簡單的例子:

初始值

看成由長度為1的7個子序列組成

第一次合併之後 【38 49】 【65 97】 【13 76】

看成由長度為1或2的4個子序列組成

第二次合併之後 【38 49 65 97】 【13 27 76】

看成由長度為4或3的2個子序列組成

第三次合併之後 【13 27 38 49 65 76 97】

歸併排序 先將初始的序列表看成是n個長度為1的有序表 (1)定義指標i,指向第乙個序列表的第乙個元素

* (2)定義指標j,指向第二個序列表的第乙個元素 (3)比較i,j指向的元素大小,若前者大,將後者插入到新錶中否則,把前者插入到後表中

* (4)直到取完第乙個序列表或者第二個序列表為止

packagepaixu;

public

classguibing ;

sort(aa,0,aa.length-1);

for(intd :aa)

}public

static

intsort(intnum,intlow,inthigh)

returnnum;

}public

static

voidmerge(intnum,intlow,intmid,inthigh)else

}while(i<=mid)

while(j<=high)

for(intm=0;mlength;m++)}}

排序演算法 歸併排序 (java)

歸併排序,顧名思義,就是將資料進行合併,我們首先將待排陣列分成兩個子串行,然後在對其單個序列進行排序,不斷遞迴到只有兩個元素的子串行,然後再向上返回,最中得到的是兩個有序的子串行,最後我們通過乙個輔助陣列,遍歷這兩個陣列,挑選出較小的元素將其放在輔助陣列中,這樣我們就會在輔助陣列中將數排好序了,然後...

Java排序演算法 歸併排序

歸併排序 merge 是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有...

Java排序演算法 歸併排序

歸併排序 merge 是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有...