(七)歸併排序

2021-09-26 02:59:09 字數 791 閱讀 3448

歸併排序也是八大排序演算法之一。

當我們的待排序的資料資料量較大並且是線性結構時用快速排序進行排序操作。但是當我們要排序的資料是鏈式結構怎麼辦?這就引入了乙個改進的排序方法——歸併排序。

它是建立在歸併操作上的一種有效的排序演算法,所謂歸併是指將若干個已排好序的部分合併成乙個有序的部分。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用,歸併排序將兩個已排序的表合併成乙個表。

這裡有個很重要的東西,歸併排序的前提:資料已經排好序,就是把兩組排好序的資料進行排序。

//left和right分別代表陣列的頭尾兩個下標

public static void mergesort(int array,int left,int right)else

} //對陣列的歸併操作

public static void merge(int array,int left,int mid,int right){

int leftsize=mid-left;

int rightsize=right-mid+1; //把mid位置的資料放到右邊的陣列中

//生成陣列

int leftarray=new int[leftsize];

int rightarray=new int[rightsize];

//填充左邊的陣列

for(int i=left;i從**上我們可以看出,歸併排序就是對陣列的分割歸併過程,所以我們必須要掌握這個歸併陣列的過程。然後通過分治思想對待排序的陣列進行排序。

歸併排序應用場景:資料量大並且是鏈式儲存結構的資料。

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

排序思路 分治 將長度為len的陣列array分為 0,len 2 len 2 1,len 1 直到無法繼續劃分為止。合併 將子陣列逐級合併,合併過程中進行排序 申請與len相當大小的空間tmp,比較當前要合併的2個陣列的元素,從小到大,排入到tmp。排序好的tmp複寫array對應的索引位置。舉例...

歸併排序(2 路歸併排序)

遞迴寫法 include define maxn 100 void merge int a,int l1,int r1,int l2,int r2 將陣列a的區間 l1,r1 和區間 l2,r2 合併為乙個有序區間 else while i r1 while j r2 for int i 0 i非遞...

python歸併排序 python 歸併排序

排序思路 1.將陣列分成兩組a,b,建立臨時陣列 c,c長度 a b 2.i,j分別屬於a,b 3.若a i b j 將b j 放入c,j 否則 a i 放入c,i 4.迴圈3步驟,將a或b中剩餘的元素放入c,再將c複製到陣列中 5.遞迴3 4直到a,b序列的長度 1 歸併排序 class merg...