2021 03 05部落格3 歸併排序

2021-10-21 04:11:11 字數 1863 閱讀 5739

主要還是體現的分治思想,將資料先拆分n組在進行組合。

同時也得利用到遞迴回溯的思想

歸併排序和快速排序時間複雜度均為nlogn

上題第一題:(同快排一樣的題用歸併排序來寫)

給定你乙個長度為n的整數數列。

請你使用歸併排序對這個數列按照從小到大進行排序。

並將排好序的數列按順序輸出。

輸入格式

輸入共兩行,第一行包含整數 n。

第二行包含 n 個整數(所有整數均在1~109範圍內),表示整個數列。

輸出格式

輸出共一行,包含 n 個整數,表示排好序的數列。

資料範圍

1≤n≤100000

輸入樣例:

#include

using

namespace std;

const

int n =

1e6+10;

int q[n]

;int temp[n]

;int n;

void

merge_sort

(int q,

int l ,

int r)

while

(i <= mid) temp[k++

]= q[i++];

//**重要步驟**

while

(j <= r) temp[k++

]= q[j++];

for(

int i = l , j =

0; i <= r ; i++

, j++)//

}int

main()

merge_sort

(q,0

,n-1);

for(

int i =

0; i < n ; i++

)}

第二題:(運用歸併排序來解決其他類問題)-----逆序對的數量

給定乙個長度為n的整數數列,請你計算數列中的逆序對的數量。

逆序對的定義如下:對於數列的第 i 個和第 j 個元素,如果滿足 i < j 且 a[i] > a[j],則其為乙個逆序對;否則不是。

輸入格式

第一行包含整數n,表示數列的長度。

第二行包含 n 個整數,表示整個數列。

輸出格式

輸出乙個整數,表示逆序對的個數。

資料範圍

1≤n≤100000

#include

using

namespace std;

const

int n =

1e6+10;

int q[n]

;int temp[n]

;int n;

long

long

int sum =0;

void

merge_sort

(int q,

int l ,

int r)

}while

(i <= mid) temp[k++

]= q[i++];

while

(j <= r) temp[k++

]= q[j++];

for(

int i = l , j =

0; i <= r ; i++

, j++)}

intmain()

merge_sort

(q,0

,n-1);

printf

("%lld"

,sum)

;}

排序演算法 3 歸併排序

這篇博文分為四個部分 歸併排序基本思想 基礎 實現與解析 一次優化 二次優化 自底向上的歸併排序 1.歸併排序基本思想 3 歸併排序 小到大排序 1.迴圈的將每乙個部分都分為原來的一半 直到最後每一部分只剩下乙個元素 2.迴圈的將每兩個部分進行合併並且排序 直到最後全部合併 o n log n 2....

歸併排序(2 路歸併排序)

遞迴寫法 include define maxn 100 void merge int a,int l1,int r1,int l2,int r2 將陣列a的區間 l1,r1 和區間 l2,r2 合併為乙個有序區間 else while i r1 while j r2 for int i 0 i非遞...

python歸併排序 python 歸併排序

排序思路 1.將陣列分成兩組a,b,建立臨時陣列 c,c長度 a b 2.i,j分別屬於a,b 3.若a i b j 將b j 放入c,j 否則 a i 放入c,i 4.迴圈3步驟,將a或b中剩餘的元素放入c,再將c複製到陣列中 5.遞迴3 4直到a,b序列的長度 1 歸併排序 class merg...