using
system;
using
system.collections.generic;
using
system.linq;
using
system.text;
namespace
mergesort
;mergesort(
refarr,
0, arr.length -1
);foreach
(int
item
inarr)
console.readkey();
}///
///歸併排序
//////
待排序陣列,閉區間
///排序開始位置
///結束位置
static
void
mergesort(
refint
arr,
intstartindex,
intendindex)
}///
///歸併兩個已經排序完成的陣列,閉區間
///[startindex, midindex], [midindex + 1, endindex]
//////
帶排序陣列
//////
///static
void
merge(
refint
arr,
intstartindex,
intmidindex,
intendindex)
for(
inti =0
; i
<
m; ++
i)//
設定哨兵資料
startarrcopy[n]
=int
.maxvalue;
endarrcopy[m]
=int
.maxvalue;
//將資料歸併到原陣列中
intk
=startindex;
//總長度
inta =0
, b =0
;
//宣告兩個游標
while
( k
<=
endindex )
else
++k;}}
}}更新:2010-5-17晚
將上面的歸併排序改寫成泛型的方法,新增到easycoding的程式庫中,並新增unit測試程式,測試通過,新增排序演算法的視覺化web頁面。下面是**:/files/xuqiang/mergesorter.rar
歸併排序演算法實現
const int maxn 100 將陣列a的 l1,r1 與 l2,r2 區間合併為有序區間 此處l2即為r1 1 void merge int a,int l1,int r1,int l2,int r2 while i r1 temp index a i 將 l1,r1 剩餘元素加入temp ...
歸併排序演算法實現
關於歸併排序演算法的思想,網上有很多介紹,這裡不再解釋,這裡提供了乙個j a類,讀者可以把類潛入到自己的程式中,直接呼叫,免去了重新編寫歸併排序的過程。具體的j a 如下 1 import j a.util.2class mergesort 2021 public static void merge...
歸併排序的簡單實現
學習遞迴最開始就是斐波那契和歸併排序。核心思想就是遞迴地把序列分成兩部分,直到只剩乙個元素。然後將每次劃分的兩部分再遞迴地合併起來,合併時候的順序覺決定了排序的順序還是逆序。劃分的過程可以看做是生成一顆葉子結點數為n的二叉樹,這個過程的複雜度為lgn 樹的高度 而合併的過程是相當於將每層的節點數相加...