演算法設計與分析 分治法解決歸併排序

2021-09-16 12:14:48 字數 966 閱讀 7328

分治法解決歸併排序問題:

思想:

**如下:

#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 先分在和...