歸併排序及Java實現

2021-07-25 01:44:10 字數 1266 閱讀 4027

一 歸併排序演算法

歸併排序是採用分治法的乙個非常典型的應用。歸併排序的思想就是先遞迴分解陣列,再合併陣列。

首先考慮下如何將將二個有序數列合併。這個非常簡單,只要從比較二個數列的第乙個數,誰小就先取誰,取了後就在對應數列中刪除這個數。然後再進行比較,如果有數列為空,那直接將另乙個數列的資料依次取出即可。

二 **實現

// 將有二個有序數列a[first...mid]和a[mid...last]合併

public

static

void

mergearray(int src, int dest, int first, int mid, int last)

else

}while(i<=mid)

dest[k++] = src[i++];

while(j<=last)

dest[k++] = src[j++];

for(i=0; ipublic

static

void

mergesort(int src, int dest, int first, int last)

}

上面的**可能不是很簡潔,對其進行修改,得如下**

public

void

sortintegers2(int a)

public

void

mergesort(int a, int temp, int left, int right)

int mid = (left + right) / 2;

mergesort(a, temp, left, mid);

mergesort(a, temp, mid + 1, right);

int p_final = left;

int p_left = left;

int p_right = mid + 1;

while (p_left <= mid || p_right <= right) else

}for (int i = left; i <= right; i++)

}

三 歸併排序性質

歸併排序的效率是比較高的,設數列長為n,將數列分開成小數列一共要logn步,每步都是乙個合併有序數列的過程,時間複雜度可以記為o(n),故一共為o(n*logn)。因為歸併排序每次都是在相鄰的資料中進行操作,所以歸併排序在o(n*logn)的幾種排序方法(快速排序,歸併排序,希爾排序,堆排序)也是效率比較高的。

歸併排序 Java實現

歸併排序 mergesort 1 思想 多次將兩個或兩個以上的有序表合併成乙個新的有序表。2 演算法時間複雜度 最好的情況下 一趟歸併需要n次,總共需要logn次,因此為o n logn 最壞的情況下,接近於平均情況下,為o n logn 說明 對長度為n的檔案,需進行logn 趟二路歸併,每趟歸併...

Java實現歸併排序

剛開始接觸歸併排序的時候,感覺挺困難的,但是仔細的分析之後,就會發現它的原理還是蠻簡單的 就是借助另外的乙個陣列空間將左右兩側 從中間mid處劃分 已經排序好的原陣列轉到新的陣列空間。如下圖所示 轉移操作時,就是左右所指的資料進行比較,將較小的資料 由小到大排序 儲存到新的陣列空間。如下圖所示 了解...

Java實現歸併排序

思想就是 將陣列分成兩個陣列,如果兩個陣列的元素都是有序的,那麼就可以很方便的將這兩組資料歸併。如果沒有序繼續將兩組陣列分組,以此類推,當組內只有乙個資料時,認為這個小組內已經有序,然後合併相鄰兩個小組就可以。package sort 歸併排序 2015 05 31 public class mer...