排序题 我用所有基本的算法做了一遍
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 }
时间: 2024-12-26 10:37:57