排序模板(从小到大)

    xiaoxiao2021-11-29  40

    1.函数排序(最粗暴的)

    #include<cstdio> #include<algorithm>// sort 的头文件 using namespace std; int main() { int n,a[1001]; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+1+n); for(int i=1;i<=n;i++) printf("%d ",a[i]); return 0; } 2.插入排序O(n^2)

    #include<iostream> using namespace std; int main() { int n,i,j,a[10001]; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) if(a[i]>a[j]) { int t=a[i]; a[i]=a[j]; a[j]=t; } for(i=1;i<=n;i++) cout<<a[i]<<" "; return 0; } 3. 冒泡排序

    #include<iostream> using namespace std; int main() { int n,i,j,a[10001]; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; for(i=1;i<=n;i++) for(j=i;j<=n;j++) if(a[i+1]<a[i]) { int t=a[i]; a[i]=a[j]; a[j]=t; } for(i=1;i<=n;i++) cout<<a[i]<<" "; return 0; }

    4. 桶排序

    #include<iostream> using namespace std; int main() { int n,i,a[10001],max1=0,x; cin>>n; for(i=1;i<=n;i++) { cin>>x; a[x]++; if(x>max1) max1=x; } for(i=1;i<=max1;i++) while(a[i]--) cout<<i<<" "; return 0; } 5. 快排

    #include<iostream> using namespace std; int a[1001]; int qs(int l,int r) { int i,j,mid,p; i=l;j=r; mid=a[(l+r)/2]; do { while(a[i]<mid) i++; while(a[j]>mid) j--; if(i<=j) { p=a[i];a[i]=a[j];a[j]=p; i++;j--; } }while(i<=j); if(l<j) qs(1,j); if(i<r) qs(i,r); } int main() { int n,i; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; qs(1,n); for(i=1;i<=n;i++) cout<<a[i]<<" "; } 6. 归并排序

    #include<iostream> using namespace std; int a[1001],r[1001]; void ms(int s,int t) //对 [s,t] 区间的无序数据进行归并排序 { int m,i,j,k; if(s==t) return ; //若区间只有一个就不用排了 m=(s+t)/2; ms(s,m); ms(m+1,t); i=s; j=m+1; k=s; while(i<=m&&j<=t) { if(a[i]<=a[j]) { r[k]=a[i];i++;k++; } else { r[k]=a[j];j++;k++; } } while(i<=m) { r[k]=a[i];i++;k++; } while(j<=t) { r[k]=a[j];j++;k++; } for(i=s;i<=t;i++) a[i]=r[i]; } int main() { int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; ms(1,n); for(int i=1;i<=n;i++) cout<<a[i]<<" "; return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-678774.html

    最新回复(0)