码迷,mamicode.com
首页 > 编程语言 > 详细

PAT 排序

时间:2015-06-15 23:38:48      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

排序

排序题  我用所有基本的算法做了一遍

1.冒泡从这道题看出了它的效率低下 

技术分享

下面是代码

 1 #include <stdio.h>
 2 main()
 3 {
 4     int a[100000];
 5     int n,i,j,temp,pos;
 6     scanf("%d",&n);
 7     for(i=0;i<n;i++)
 8         scanf("%d",&a[i]);
 9     for(i=1;i<n;i++)
10     {    
11         for(j=1;j<=n-i;j++)
12         {
13             if(a[j-1]>a[j])
14             {
15                 temp=a[j-1];
16                 a[j-1]=a[j];
17                 a[j]=temp;
18             }
19         }    
20     }
21     printf("%d",a[0]);
22     for(i=1;i<n;i++)
23         printf(" %d",a[i]);
24 }

 

2.选择排序

 效率和冒泡基本一样

 技术分享 

 

3.快排

 若pivot取第一个 效率会差很多很多  第五六个测试点过不了

 我的代码用了中间的数作为pivot

 技术分享

 

 1 #include <stdio.h>
 2 #define N 100000
 3 
 4 void quicksort(int a[],int left,int right)
 5 {
 6     int i,j,temp,pivot;
 7     i=left;j=right;
 8     if(left<right)
 9     {
10         temp=a[i];
11         a[i]=a[(i+j)/2];
12         a[(i+j)/2]=temp;
13         pivot=a[i];
14         while(i<j)
15         {
16             while( i<j &&a[j]>pivot)
17                 j--;
18             if(i<j)
19                 a[i++]=a[j];
20             while(i<j&&a[i]<pivot)
21                 i++;
22             if(i<j)
23                 a[j--]=a[i]    ;
24         }
25         a[i]=pivot;
26         quicksort(a,left,i-1);
27         quicksort(a,i+1,right);
28     }
29     
30     
31 }      
32 int main()
33 {
34     int i,a[N],n;
35     scanf("%d",&n);
36     
37     for(i=0;i<n;i++)
38         scanf("%d",&a[i]);
39     quicksort(a,0,n-1);
40     printf("%d",a[0]);
41     for(i=1;i<n;i++)
42         printf(" %d",a[i]);
43 }

 

4.堆排

 和快排基本差不多

 技术分享

 

 1 #define N 100002
 2 #include "stdio.h"
 3 void HeapAdjust(int a[],int s,int n)
 4 {
 5     int j,t;
 6     while(2*s<=n)
 7     {
 8         j=2*s;
 9         if(a[j]<a[j+1]&&j+1<=n)
10             j++;
11         if(a[s]<a[j])
12         {
13             t=a[s];
14             a[s]=a[j];
15             a[j]=t;
16             s=j;
17         }
18         else    
19             break;
20     }
21 }
22 void HeapSort(int a[],int n)
23 {
24     int i,t;
25     for(i=n/2;i>=1;i--)
26         HeapAdjust(a,i,n);
27     for(i=n;i>=1;i--)
28     {
29         t=a[1];
30         a[1]=a[i];
31         a[i]=t;
32         HeapAdjust(a,1,i-1);
33     }
34 }
35 main()
36 {
37     int i,a[N],n;
38     scanf("%d",&n);
39     a[0]=-1;
40     for(i=1;i<=n;i++)
41         scanf("%d",&a[i]);
42     HeapSort(a,n);
43     printf("%d",a[1]);
44     for(i=2;i<=n;i++)
45         printf(" %d",a[i]);
46 }

 

 

 5.归并排序

  不知道为什么提交上去 各种段错误  希望大家帮忙看看代码 据说这个要比快排效率高

 技术分享

 1 #define N 100002
 2 #include "stdio.h"
 3 void HeapAdjust(int a[],int s,int n)
 4 {
 5     int j,t;
 6     while(2*s<=n)
 7     {
 8         j=2*s;
 9         if(a[j]<a[j+1]&&j+1<=n)
10             j++;
11         if(a[s]<a[j])
12         {
13             t=a[s];
14             a[s]=a[j];
15             a[j]=t;
16             s=j;
17         }
18         else    
19             break;
20     }
21 }
22 void HeapSort(int a[],int n)
23 {
24     int i,t;
25     for(i=n/2;i>=1;i--)
26         HeapAdjust(a,i,n);
27     for(i=n;i>=1;i--)
28     {
29         t=a[1];
30         a[1]=a[i];
31         a[i]=t;
32         HeapAdjust(a,1,i-1);
33     }
34 }
35 main()
36 {
37     int i,a[N],n;
38     scanf("%d",&n);
39     a[0]=-1;
40     for(i=1;i<=n;i++)
41         scanf("%d",&a[i]);
42     HeapSort(a,n);
43     printf("%d",a[1]);
44     for(i=2;i<=n;i++)
45         printf(" %d",a[i]);
46 }

 

PAT 排序

标签:

原文地址:http://www.cnblogs.com/threezj/p/4579296.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!