【NOJ1002】【演算法實驗一】【分治演算法】歸併排序
阿新 • • 發佈:2018-12-12
1002.歸併排序
時限:1000ms 記憶體限制:10000K 總時限:3000ms
描述
給定一個數列,用歸併排序演算法把它排成升序。
輸入
第一行是一個整數n(n不大於10000),表示要排序的數的個數; 下面一行是用空格隔開的n個整數。
輸出
輸出排序後的數列,每個數字佔一行。
輸入樣例
5 3 2 1 4 5
輸出樣例
1 2 3 4 5
#include <iostream> using namespace std; int a[10001]; int tmp[10001]; void Mergesort(int a[],int left,int right); int main() { int n,i; cin>>n; for(i=0;i<n;i++) cin>>a[i]; Mergesort(a,0,n-1); for(i=0;i<n;i++) cout<<a[i]<<endl; return 0; } void Mergesort(int a[],int left,int right) { if(left==right) return; else{ int mid=(left+right)/2; Mergesort(a,left,mid); Mergesort(a,mid+1,right); //gui bing int i=left,j=mid+1,k=left; for(;i<=mid&&j<=right;){ if(a[i]<a[j]) tmp[k++]=a[i++]; else tmp[k++]=a[j++]; } for(;i<=mid;) tmp[k++]=a[i++]; for(;j<=right;) tmp[k++]=a[j++]; for(k=left;k<=right;k++) a[k]=tmp[k]; } }