歸併排序----分治
時間複雜度: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 下面採用遞迴排...