1、遞迴實現歸併排序
遞迴排序其實也是利用了完全二叉樹的結構形式,所以時間複雜度和logn掛鉤的。具體遞迴版的歸併排序呢,看下面的**:
public
class
ms ;
print(s);
mergesort(s);
system.out.println("排序後的陣列:");
print(s);
}public
static
void
mergesort(int data)
public
static
void
sort(int data, int left, int right)
/**
* 將兩個陣列進行歸併,歸併前面2個陣列已有序,歸併後依然有序
* *@param data
* 陣列物件
*@param left
* 左陣列的第乙個元素的索引
*@param center
* 左陣列的最後乙個元素的索引,center+1是右陣列第乙個元素的索引
*@param right
* 右陣列最後乙個元素的索引
*/public
static
void
merge(int data, int left, int center, int right) else
} // 剩餘部分依次放入臨時陣列(實際上兩個while只會執行其中乙個)
while (mid <= right)
while (left <= center)
// 將臨時陣列中的內容拷貝回原陣列中
// (原left-right範圍的內容被複製回原陣列)
while (tmp <= right)
} public
static
void
print(int data)
system.out.println();
} }
執行結果如下:
5 3 6 2 1 9 4 8 7
3 5 6 2 1 9 4 8 7
3 5 6 2 1 9 4 8 7
3 5 6 1 2 9 4 8 7
1 2 3 5 6 9 4 8 7
1 2 3 5 6 4 9 8 7
1 2 3 5 6 4 9 7 8
1 2 3 5 6 4 7 8 9
1 2 3 4 5 6 7 8 9
排序後的陣列:
1 2 3 4 5 6 7 8 9
2、非遞迴實現歸併排序
由於遞迴的過程中要用到棧,那麼這無疑會增加額外的時間和空間消耗,因此,在選擇時,有限選擇非遞迴版的歸併演算法。具體**如下:
package 排序;
//非遞迴實現歸併排序
public
class newms ;
print(s);
mergesort2(s);
system.out.println("排序後的陣列:");
print(s);
}private
static
void
mergesort2(int s)
}private
static
void
mergepass(int s, int k, int len)
if(i1)
}private
static
void
merge(int s, int left, int m, int right)
}while(left<=m)
while(j<=right)
while(third<=right)
}private
static
void
print(int s)
system.out.println();
}}
執行結果如下:
5 3 6 2 1 9 4 8 7
3 5 6 2 1 9 4 8 7
3 5 2 6 1 9 4 8 7
3 5 2 6 1 9 4 8 7
3 5 2 6 1 9 4 8 7
2 3 5 6 1 9 4 8 7
2 3 5 6 1 4 8 9 7
1 2 3 4 5 6 8 9 7
1 2 3 4 5 6 7 8 9
排序後的陣列:
1 2 3 4 5 6 7 8 9
以上就是關於歸併排序的程式部分,望共享。 排序 歸併排序 遞迴和非遞迴實現
歸併排序的遞迴實現 import math 遞迴實現 defmerge sort arr if len arr 2 return arr middle math.floor len arr 2 left,right arr 0 middle arr middle return merge merge...
歸併排序 遞迴和非遞迴
一 遞迴 遞迴版本 採用分治的方法,將n個元素自頂向下分成兩個n 2的子問題,再將子問題進行劃分,最終將整個問題分解成每個字表長度為 1 的有序表,然後自底向上成對歸併。include int b 100 中間過程陣列 void merge int a,int low,int mid,int hig...
歸併排序的遞迴和非遞迴實現
歸併排序是乙個時間複雜度為o nlogn 的演算法,它可以由遞迴和非遞迴兩種方式實現。遞迴 includeusing namespace std void combine int nums,int l,int m,int r else while i m while j r k 0 for i l ...