演算法 歸併排序

2021-10-12 16:41:45 字數 990 閱讀 2391

歸併排序----分治

時間複雜度:o(n) = nlogn

穩定性:穩定的排序演算法

步驟:第一步:確定分界點:mid = (l + r) / 2

第二步:歸併排序left,right

第三步:歸併合二為一

**:

#include

using

namespace std;

int a[

100010];

int n;

int temp[

100010];

void

merge_sort

(int l,

int r)

int mid =

(l + r)

>>1;

merge_sort

(l, mid)

;merge_sort

(mid +

1, r)

;int j = mid +1;

int i = l;

int k =0;

while

(i <= mid && j <= r)

while

(i <= mid) temp[k++

]= a[i++];

while

(j <= r) temp[k++

]= a[j++];

for(

int i = l, j =

0; i <= r;

++i,

++j) a[i]

= temp[j];}

intmain()

merge_sort(0

, n-1)

;for

(int i =

0; i < n;

++i)

return0;

}

將temp中的值放回原陣列中時,需要利用i,j兩個變數進行,因為i從l到r,j從0開始。這樣就能將原陣列中的l到r排好序。

歸併演算法 歸併排序

歸併演算法 歸併排序 這周需要用到歸併演算法,於是找了找相關的資料,整理如下 歸併排序 merge sort 是利用 歸併 技術來進行排序。歸併是指將若干個已排序的子檔案合併成乙個有序的檔案。兩路歸併演算法 1 演算法基本思路 設兩個有序的子檔案 相當於輸入堆 放在同一向量中相鄰的位置上 r low...

歸併排序演算法

include stdafx.h include include include 合併兩段已經排好序的列表 void merge int list int mergelist int left int mid int right else if i mid else 將列表list按照seglen分...

歸併排序演算法

這個演算法感覺比插入難理解一些,下面說說我的理解 歸併排序的步驟 1.把長度為n的序列分為兩個長度為n 2的子串行 2.對這兩個子串行分別採用歸併排序 3.將兩個子串行合併成乙個最終的排序序列 通過步驟2可看到 在歸併排序中又用了歸併排序,可見這是乙個遞迴的過程。例如乙個陣列 a 8 下面採用遞迴排...