[算法]归并排序
Posted z354681250
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[算法]归并排序相关的知识,希望对你有一定的参考价值。
/*
Name:归并排序
Actor:HT
Time:2015年12月14日
Error Reporte:
*/
#include"stdio.h"
#include"iostream"
#include"string.h"
#include"stdlib.h"
#include"string"
#include"map"
using namespace std;
int temper[100]; //排序辅助空间
void mergearr(int* arr, int begin, int mid, int end) //归并排序的数组合并
int i = begin, j = mid + 1;
int m = mid, e = end;
int t = 0;
for (; i <= m && j <= end;) //两个数组比较大小合并
if (arr[i] > arr[j])
temper[t] = arr[i];
t++; i++;
else
temper[t] = arr[j];
t++; j++;
while (i <= m) //剩余未比较部分直接塞进去
temper[t] = arr[i];
i++; t++;
while (j <= e)
temper[t] = arr[j];
j++; t++;
for (i = begin, t = 0; i <= end; i++, t++) //放回去
arr[i] = temper[t];
void mergesort(int* arr, int begin, int end) //归并排序,fin变量用作临时储存排序好的数组
if (begin < end)
int mid = (begin + end) / 2;
mergesort(arr, begin, mid);
mergesort(arr, mid + 1, end);
mergearr(arr, begin, mid, end);
int main()
int i,j,n;
int a[100];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
mergesort(a,0,n-1);
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\\n");
return 0;
以上是关于[算法]归并排序的主要内容,如果未能解决你的问题,请参考以下文章