3110 二叉堆练习3

3110 二叉堆练习3

 

 时间限制: 3 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
 
题目描述 Description

给定N(N≤500,000)和N个整数(较有序),将其排序后输出。

输入描述 Input Description

N和N个整数

输出描述 Output Description

N个整数(升序)

样例输入 Sample Input

5

12 11 10 8 9

样例输出 Sample Output

8 9 10 11 12

数据范围及提示 Data Size & Hint

对于33%的数据 N≤10000

对于另外33%的数据 N≤100,000  0≤每个数≤1000

对于100%的数据 N≤500,000  0≤每个数≤2*10^9

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int a[500000];
 5 int qsort(int l,int r)
 6 {
 7     int i=l;
 8     int j=r;
 9     int mid=a[(l+r)/2];
10     do
11     {
12       while(a[i]<mid)i++;
13       while(a[j]>mid)j--;
14       if(i<=j)
15        {
16            swap(a[i],a[j]);
17         i++;
18         j--;
19        }
20     }while(i<=j);
21     if(j>l)qsort(l,j);
22     if(i<r)qsort(i,r);
23 }
24 int main()
25 {
26     int n;
27     cin>>n;
28     for(int i=1;i<=n;i++)
29      {
30          cin>>a[i];
31      }
32      qsort(1,n);
33      for(int i=1;i<=n;i++)
34       {
35           cout<<a[i]<<" ";
36       }
37 }

 

posted @ 2017-04-04 14:48  ioioioioioio  阅读(124)  评论(0)    收藏  举报