NOJ 1002归并排序
来源:互联网 发布:java ee api 编辑:程序博客网 时间:2024/06/05 08:50
归并排序
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
给定一个数列,用归并排序算法把它排成升序。
输入:
第一行是一个整数n(n不大于10000),表示要排序的数的个数;
下面一行是用空格隔开的n个整数。
输出:
输出排序后的数列,每个数字占一行。
输入样例:
53 2 1 4 5
输出样例:
12345
源代码:
#include <stdio.h>#include <stdlib.h>#include <limits.h>using namespace std;void mergesort(int arr[],int p,int r);void merge(int arr[],int p,int q,int r);int main(){ int n; int a[10002]; int i; 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\n",a[i]);return 0;}void mergesort(int arr[],int p,int r){ int q; if(p<r){ q=(r+p)/2; mergesort(arr, p, q); mergesort(arr,q+1,r); merge(arr,p,q,r); }}void merge(int arr[],int p,int q,int r){ int len1=q-p+1; int len2=r-q; int i,j,k; int *L=new int[len1+1]; int *R=new int[len2+1];for(i=0;i<len1;i++) L[i]=arr[p+i];for(j=0;j<len2;j++) R[j]=arr[q+1+j]; L[len1]=R[len2]=INT_MAX; i=0; j=0;for(k=p;k<=r;k++) { if(L[i]<R[j]) arr[k]=L[i++]; else arr[k]=R[j++]; }}
- NOJ 1002归并排序
- 算法练习-NOJ-1002-归并排序
- [noj 1395] 乾坤大挪移 (树状数组,归并排序)
- 1002 归并排序
- 1002:归并排序
- NOJ 字符串排序 1023
- NOJ 1064 快速排序
- NOJ 1023 字符串排序
- NOJ 1543 冒泡排序
- NOJ 1036 数字排序
- 归并排序-归并排序
- 股价排序问题 NOJ 1683
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 人民币入篮SDR:全球购买力隐形大山开始崩塌
- Leetcode 209. Minimum Size Subarray Sum
- 单链表逆序
- hdu2955 01背包 状态转化
- HDOJ 5512 Pagodas 【2015沈阳现场赛】数论
- NOJ 1002归并排序
- 微信公众平台开发----接入微信接口
- PackageManager
- TensorFlow介绍_中文版
- 字母+数字验证码(一)
- C++数组实现最简单的二叉树
- TensorFlow介绍_中英文对照
- 字母+数字验证码(二)
- 迷之四川省赛A题 Nearest Neighbor Search 数学题 国庆咸鱼