您的位置:首页 > Web前端 > Node.js

Node:普通归并

2015-07-13 20:23 615 查看
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <stack>
#include <queue>

#define flush(arr,i) memset(arr,i,sizeof(arr))
using namespace std;
const int maxn=1010;
int arr[maxn], tmp[maxn];
int n,m;

//向上归并的实现
void mergeUp(int l, int m, int r)
{
int i = l, j = m + 1, pos = l;
//依次取数据到tmp中,左区间[l...m],右区间[m+1...r]
while( i <= m && j <= r)
{
if(arr[i] < arr[j])
tmp[pos++] = arr[i++];
else
tmp[pos++] = arr[j++];
}
//将剩下的有序序列添加到tmp之后
while(i <= m)
tmp[pos++] = arr[i++];
while(j <= r)
tmp[pos++] = arr[j++];
//排序成功拷贝
for(int k = l; k <= r; k++)
arr[k] = tmp[k];

}

//向下划分
void mergeSort(int l,int r)
{
if(l < r)
{
int m = (l + r) / 2;
mergeSort(l, m);
mergeSort(m + 1, r);
//向上归并
mergeUp(l, m, r);
}
}

int main()
{
freopen("data.txt","r",stdin);
scanf("%d",&n);
for(int i = 0; i < n; i++)
scanf("%d",arr + i);
for(int i = 0; i < n; i++)
printf("%d%c", arr[i], i == n-1 ? '\n' : ' ');
mergeSort(0, n - 1);
for(int i = 0; i < n; i++)
printf("%d%c", arr[i], i == n-1 ? '\n' : ' ');
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  algorithm