合併排序優化演算法

2021-08-20 04:47:49 字數 925 閱讀 8048

public class solution ;

mergesort(arr);

for (int x : arr)

}// 歸併排序-遞迴

// 首先選擇中間的位置mid,然後對[l,mid],[mid+1,r]分別進行歸併排序

// 最後利用乙個新陣列儲存上面的兩部分結果,再對這部分進行排序

// 優化:arr[mid] < arr[mid+1]時,本身是有序的,無需進行合併    

public void mergesort(int arr)

private void merge_sort(int arr, int l, int r)

int mid = (l + r) / 2;

merge_sort(arr, l, mid);

merge_sort(arr, mid + 1, r);

merge(arr, l, r, mid);

}private void merge(int arr, int l, int r, int mid)

int temp = new int[r - l + 1];

for (int i = l; i <= r; i++)

int first = 0;

int flag = mid - l;

int next = flag + 1;

if (arr[mid] < arr[mid+1])

int i = l;

while (first <= flag && next <= r-l) else if (next <= r && temp[first] >= temp[next])

i++;

}while (first <= flag)

while (next <= r-l)

}//在r-l<15時,可以選擇插入排序

合併排序演算法

陣列ary的m個元素,ary p ary q ary q 1 ary r 已按曾序排序 使得ary p ary r 按曾序排列 void clibrary merge int ary,int p,int q,int r,int m else k 0 for i p i r i ary i bp k ...

合併排序演算法

主要思想 不斷將已經有序的子陣列a p.q 和a q 1.r 合併為新的有序的陣列a p.r 具體過程可如下操作 分解 將n個元素分成各含n 2個元素的子串行 解決 對兩個子陣列遞迴地排序 合併 合併兩個已經有序的子陣列得到最終的有序陣列。合併 歸併排序 分治策略 include include u...

合併排序演算法

合併排序是用分治策略實現的排序演算法之一。基本思想是 將待排序的元素分成大小大致相同的兩個子集合,分別對這兩個子集合進行排序,最後將排好序的子集合合併成所需要的集合。此方法的時間複雜度t n o nlogn 這種排序方法漸進最優演算法。合併排序 遞迴 include using namespace ...