归并排序

Posted sykline

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序相关的知识,希望对你有一定的参考价值。

自己对归并排序的理解:

归并排序采用分治法来实现,将要排序的数组对半拆分,当拆分到单个元素的时候,在进行合并这时按照一定的顺序合并到临时数组temp中,最后在存入原来的数组中。

代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <queue>
 6 #include <vector>
 7 #include <algorithm>
 8 #define FRE() freopen("in.txt","r",stdin)
 9 #define INF 0x3f3f3f3f
10 
11 using namespace std;
12 typedef long long ll;
13 const int maxn = 5005;
14 int a[maxn],temp[maxn];//负责度O(N*logN)
15 
16 void mergearrge(int a[],int st,int mid,int en,int temp[])//合并数组
17 {
18     int i = st,j = mid+1;
19     int k = 0;
20     while(i <= mid && j <= en)
21     {
22         if(a[i] <= a[j])
23             temp[k++] = a[i++];
24         else
25             temp[k++] = a[j++];
26     }
27     while(i <= mid)
28         temp[k++] = a[i++];
29     while(j <= en)
30         temp[k++] = a[j++];
31     for(int i = 0; i < k; i++)
32         a[st + i] = temp[i];
33 }
34 
35 void mergesort(int a[],int st,int en,int temp[])//拆分数组
36 {
37     if(st < en)
38     {
39         int mid = (st + en) / 2;
40         mergesort(a, st, mid, temp);
41         mergesort(a, mid+1, en, temp);
42         mergearrge(a, st, mid, en, temp);
43     }
44 }
45 
46 int main()
47 {
48     a[0] = 5;a[1] = 10;
49     a[2] = 45;a[3] = 11;
50     a[4] = -1;a[5] = 900;
51     mergesort(a, 0, 5, temp);//注意开始和结束下标的填法
52     for(int i =0; i < 6; i++)
53         printf("%d ",temp[i]);
54     return 0;
55 }

 

以上是关于归并排序的主要内容,如果未能解决你的问题,请参考以下文章

python代码实现归并排序(Merge Sort )

排序之外部排序

Python代码实现归并排序

Python代码实现归并排序

算法排序02——归并排序介绍及其在分治算法思想上与快排的区别(含归并代码)

排序算法之归并排序