歸併排序 小講

2021-06-23 05:34:33 字數 1004 閱讀 1236

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。值得注意的是歸併排序是一種穩定的排序方法。

將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。

例如有兩個有序表:(7,10,13,15)和(4,8,19,20),歸併後得到的有序表為:(4,7,8,10,13,15,19,20)。

歸併排序是穩定的排序,即相等的元素的順序不會改變。如輸入記錄 1(1) 3(2) 2(3) 2(4) 5(5) (括號中是記錄的關鍵字)時,輸出的 1(1) 2(3) 2(4) 3(2) 5(5) 中的2 和 2 是按輸入的順序,這對要排序資料報含多個資訊而要按其中的某乙個資訊排序,要求其它資訊盡量按輸入的順序排列時很重要,這也是它比快速排序優勢的地方。

歸併排序的核心就在於,不斷地去尋找乙個有序的數列,再將相鄰的有序數列合併,而這個過程,就由遞迴來實現。

下面直接上**

#include #include #include using namespace std;

#define n 500

int temp[n];

int a[n];

void mergearray(int a, int first, int mid, int last, int temp)

while (i <= m)

temp[k++] = a[i++];

while (j <= n)

temp[k++] = a[j++];

for (i = 0; i < k; i++)

a[first + i] = temp[i];

}void mergesort(int a, int first, int last, int temp)

}int main()

}/**

101 5 8 23 6 19 90 7 30 2

**/

新手講排序 歸併排序

歸併排序給我的感覺 程式設計一定要認真,不然就算你能想通也要糾纏你很長時間 1 本質 1.分解 用二分法,每次將陣列分成兩個元素數量相同或者差乙個 奇數 的子陣列,然後遞迴直到將子陣列分成乙個乙個的元素,實際陣列不用分,你直接將它看成已經分好的元素 2.合併 將len 1的陣列合併成len 2的陣列...

歸併排序 小和問題

public class mergesort sortprocess arr,0,arr.length 1 遞迴 public static void sortprocess int arr,int l,int r int mid l r l 1 sortprocess arr,l,mid t n ...

歸併排序 小和問題

問題描述 在乙個陣列中,每乙個數左邊比當前數小的數累加起來,叫做這個陣列的小和。求乙個陣列的小和。樣例 1,3,4,2,5 1左邊比1小的數,沒有 3左邊比3小的數,1 4左邊比4小的數,1 3 2左邊比2小的數,1 5左邊比5小的數,1 3 4 2 所以小和為1 1 3 1 1 3 4 2 16 ...