排序算法模板
选择排序
//选择 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e4+5; int a[N]; int main(){ int n; printf("请输入数组元素个数:"); scanf("%d",&n); srand(time(NULL)); for(int i=0;i<n;i++)a[i]=1+(rand()%100); printf("生成的数组为:"); for(int i=0;i<n;i++)printf("%d ",a[i]); printf("\n"); for(int i=0;i<n-1;i++){ int min=i; for(int j=i+1;j<n;j++){ if(a[min]>a[j])min=j; } swap(a[i],a[min]); } printf("排序后:"); for(int i=0;i<n;i++)printf("%d ",a[i]); printf("\n"); return 0; }
归并排序
//归并 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e4+5; int a[N],L[N],R[N]; void merge(int l,int m,int r){ int n1=m-l+1,n2=r-m; for(int i=0;i<n1;i++)L[i]=a[l+i]; for(int i=0;i<n2;i++)R[i]=a[m+1+i]; int k1=0,k2=0,k=l; while(k1<n1&&k2<n2){ if(R[k2]<L[k1])a[k++]=R[k2++]; else a[k++]=L[k1++]; } for(int i=k1;i<n1;i++)a[k++]=L[k1++]; for(int i=k2;i<n2;i++)a[k++]=R[k2++]; } void mergesort(int l,int r){ if(l<r){ int m=(l+r)/2; mergesort(l,m); mergesort(m+1,r); merge(l,m,r); } } int main(){ int n; printf("请输入数组元素个数:"); scanf("%d",&n); srand(time(NULL)); for(int i=0;i<n;i++)a[i]=1+(rand()%1000); printf("生成的数组为:"); for(int i=0;i<n;i++)printf("%d ",a[i]); printf("\n"); mergesort(0,n-1); printf("排序后:"); for(int i=0;i<n;i++)printf("%d ",a[i]); printf("\n"); return 0; }
冒泡排序
//冒泡 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e4+5; int a[N]; int main(){ int n; printf("请输入数组元素个数:"); scanf("%d",&n); srand(time(NULL)); for(int i=0;i<n;i++)a[i]=1+(rand()%100); printf("生成的数组为:"); for(int i=0;i<n;i++)printf("%d ",a[i]); printf("\n"); for(int i=0;i<n-1;i++){ for(int j=0;j<n-1;j++){ if(a[j]>a[j+1])swap(a[j],a[j+1]); } } printf("排序后:"); for(int i=0;i<n;i++)printf("%d ",a[i]); printf("\n"); return 0; }
快速排序
//快速 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e4+5; int a[N]; void quick_sort(int l,int r){ if(l>=r)return; int i=l,j=r,temp=a[l]; while(i!=j){ while(i<j&&a[j]>=temp)j--; while(i<j&&a[i]<=temp)i++; if(i<j)swap(a[i],a[j]); } a[l]=a[i]; a[i]=temp; quick_sort(l,i-1); quick_sort(i+1,r); } int main(){ int n; printf("请输入数组元素个数:"); scanf("%d",&n); srand(time(NULL)); for(int i=0;i<n;i++)a[i]=1+(rand()%100); printf("生成的数组为:"); for(int i=0;i<n;i++)printf("%d ",a[i]); printf("\n"); quick_sort(0,n-1); printf("排序后:"); for(int i=0;i<n;i++)printf("%d ",a[i]); printf("\n"); return 0; }
插入排序
//插入 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e4+5; int a[N]; void Insertion_Sort(int n) { int i,j; for(i=1;i<n;i++) { int temp=a[i]; for(j=i;j>0&&a[j-1]>temp;--j) a[j]=a[j-1]; a[j]=temp; } } int main(){ int n; printf("请输入数组元素个数:"); scanf("%d",&n); srand(time(NULL)); for(int i=0;i<n;i++)a[i]=1+(rand()%100); printf("生成的数组为:"); for(int i=0;i<n;i++)printf("%d ",a[i]); printf("\n"); Insertion_Sort(n); printf("排序后:"); for(int i=0;i<n;i++)printf("%d ",a[i]); printf("\n"); return 0; }