注:圖是別人的.
由圖可以看出來,歸併就是:
先將陣列對半分,1分為2,2再對半分,一直分到只有單個的時候。
對只能分到單個對時候停止分割,對兩個進行比較排序,
第一次排序好後,至少2個數是順序的,之後是遞迴的過程,同理歸併別的分組。
下面**分析下:
// a為需要排序的陣列,low是低位,high是高位
static
void
sort
(int
a,int low,
int high)
}static
void
merge
(int
a,int low,
int mid,
int high)
else
}// 如果左邊還沒有結束,則繼續進行分配
while
(i <= mid)
// 右邊也是這樣
while
(j <= high)
// 將重新排序好的temp 覆蓋到a陣列上面去
注:出處
// 遞迴實現
static
void
quicksort
(int
a,int low,
int high)
// 如果小於就向右移動,直到大於temp的數
while
(a[i]
<= temp && i < j)
// 這裡有個iif
(i < j)
}// 和temp交換
a[low]
= a[i]
; a[i]
= temp;
// 遞迴排序左邊
quicksort
(a, low, i -1)
;// 遞迴排序右邊
quicksort
(a, i +
1, high)
;}
Algorithm(二) 歸併排序
歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併排序 歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用 分治法 divide and conquer 的乙個非常典型...
插入排序和歸併排序 Algorithm
插入排序 templatevoid insert sort t ptr,int length ptr j 1 key 歸併排序 test case merge ptr,i,i,i 1 test case merge ptr,i,i,i templatevoid merge t ptr,int bg,...
快速排序 歸併排序
感覺好久之前不寫這些基礎的東西忽然覺著,想複習一下,就簡單溫習一下排序的例子 package com.ruishenh.algoritmic public class sort static void printmsg int arrs system.out.println static int g...