分治法解決歸併排序問題:
思想:
**如下:
#include "stdafx.h"
#include#includeusing namespace std;
//這個函式是用來最後將兩個子問題再來歸併排序的
void merge(int r, int r1, int head, int mid, int tail)
while (i <= mid) //若第乙個子串行沒處理完,則進行收尾處理
r1[k++] = r[i++];
while (j <= tail) //若第二個子串行沒處理完,則進行收尾處理
r1[k++] = r[j++];
}//歸併排序
void mergesort(int r, int head, int tail)
}int main()
{ int list[100],n;
cout << "請輸入陣列的長度n:";
cin >> n;
cout << "請輸入陣列中的元素值:";
for (int i = 0; i < n; i++)
cin >> list[i];
cout << "進行歸併排序……";
mergesort(list, 0, n-1);
cout << "歸併排序後,陣列為:"<程式執行結果:
遇事不決,可問春風。
分治法與歸併排序
分解 將原問題分解成一系列子問題 解決 遞迴地求解各子問題。若子問題足夠小,則直接求解 合併 將子問題的結果合併成原問題的解。歸併排序 合併排序 歸併排序的關鍵在於歸併兩個相鄰的子串行,使其變成乙個排序好的新序列。如果這個新序列就是原來需要進行排序的陣列,那麼排序完成。所以,我們需要將原序列遞迴地分...
演算法 分治法之歸併排序
一 歸併的思想 是分治演算法的完美體現 步驟一 拆解演算法 a.找出分解點,在此處是是中間點拆分,拆成左右倆個陣列。b.左 右倆個陣列採用同樣的方式拆解,一直迴圈拆,直到拆到乙個元素為止 因為乙個元素本身就是有序的特性 步驟二 合併演算法 利用倆個有序的陣列比較簡單合併的思路,進行合併 二 展示 p...
分治法,歸併排序
1.時間複雜度為o nlog n 非降序 package com.cn.insertion 歸併排序,採用分治法的策略 author administrator public class merge sort mergesort a,0,9 for int i 0 i a.length i 先分在和...