题目描述 Description

给出n和n个整数,希望你从小到大给他们排序

输入描述 Input Description

第一行一个正整数n

第二行n个用空格隔开的整数

输出描述 Output Description

输出仅一行,从小到大输出n个用空格隔开的整数

样例输入 Sample Input

3

3 1 2

样例输出 Sample Output

1 2 3

数据范围及提示 Data Size & Hint

1<=n<=100000

WIKIOI难度等级:通过初赛

总耗时:717ms  内存占用:0kb  语言:C++  代码:652B

一开始选择使用了冒泡排序,排序算法使用了http://www.cnblogs.com/WenryXu/archive/2013/04/08/3006677.html 里面修改后的那段代码,WA

然后用了更简单的冒泡排序代码:http://wenryxu.com/archives/574 结果TLE了

只好选择更好的算法了,用shell排序,下面就是AC的代码

     
    
    
    
  1. #include  
  2.   
  3. using namespace std; 
  4.   
  5. void bubble(int n) 
  6.     int i,j,k,x; 
  7.     int a[n]; 
  8.   
  9.     for(i=0;i
  10.     { 
  11.         cin>>a[i]; 
  12.     } 
  13.   
  14.      k=n/2; 
  15.      while(k>=1) 
  16.      { 
  17.          for(i=k;i
  18.          { 
  19.              x=a[i]; 
  20.              j=i-k; 
  21.              while(j>=0&&x
  22.              { 
  23.                  a[j+k]=a[j]; 
  24.                  j-=k; 
  25.              } 
  26.              a[j+k]=x; 
  27.          } 
  28.          k/=2; 
  29.      } 
  30.   
  31.     for(i=0;i
  32.     { 
  33.         cout<
  34.         if(i!=(n-1)) 
  35.         { 
  36.             cout<<" "
  37.         } 
  38.     } 
  39.   
  40. int main(int argc,char *argv[]) 
  41.     int n; 
  42.   
  43.     cin>>n; 
  44.   
  45.     bubble(n); 
  46.   
  47.     return 0;  

一个朋友的AC

总耗时:1344ms   内存占用:5812kb  语言:C++  代码:610B

     
    
    
    
  1. #include 
  2. using namespace std; 
  3. int main() 
  4. {void shell (int a[],int n); 
  5.     int a[10000]; 
  6.     int i,n,b,temp; 
  7.     cin>>n; 
  8.     for(i=0;i
  9.     cin>>a[i]; 
  10.     shell(a,n); 
  11.   
  12.     for(i=0;i
  13.     { 
  14.         cout<" "
  15.     } 
  16.     cout<
  17. void shell(int a[],int n) 
  18.  { 
  19.      int i,j,k,x; 
  20.      k=n/2;//间距值 
  21.      while(k>=1) 
  22.      { 
  23.          for(i=k;i
  24.          { 
  25.              x=a[i]; 
  26.              j=i-k; 
  27.              while(j>=0&&x
  28.              { 
  29.                  a[j+k]=a[j]; 
  30.                  j-=k; 
  31.              } 
  32.              a[j+k]=x; 
  33.          } 
  34.          k/=2;//缩小间距值 
  35.      } 
  36.  }