各种排序算法整理(附带习题及代码)
Posted 月沫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了各种排序算法整理(附带习题及代码)相关的知识,希望对你有一定的参考价值。
模板部分(想背的就背一下吧,但是不建议……毕竟排序用sort函数就行了,这些排序的算法只是为了锻炼你的思维逻辑能力罢了):
1.选择排序
#include<cstdio> #define N 100000+100 int a[N],n; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<n;i++) { int k=i; for(int j=i+1;j<=n;j++) if(a[j]<a[k]) k=j; if(k!=i) { int p=a[k]; a[k]=a[i]; a[i]=p; } } for(int i=1;i<n;i++) printf("%d ",a[i]); printf("%d",a[n]); return 0; }
2.冒泡排序
#include<cstdio> #include<iostream> #define N 100000+100 int a[N],n; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<n;i++) for(int j=i+1;j<=n;j++) if(a[j]<a[i]) { int p=a[i]; a[i]=a[j]; a[j]=p; } for(int i=1;i<n;i++) printf("%d ",a[i]); printf("%d",a[n]); return 0; }
3.桶排序
#include<cstdio> #define N 100000+100 int a[N],n; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { int k; scanf("%d",&k); a[k]++; } for(int i=0;i<N;i++) while(a[i]!=0) { printf("%d ",i); a[i]--; } return 0; }
4.插入排序
#include<cstdio> #include<cstring> #define N 100000+100 int k,a[N],n,m=1; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=2;i<=n;i++) { int x=a[i]; int j=i-1; while(x<a[j]) { a[j+1]=a[j]; j--; } a[j+1]=x; } for(int i=1;i<=n;i++) printf("%d ",a[i]); return 0; }
5.快速排序
#include<cstdio> #define N 100000+100 int n,a[N]; void qsort(int l,int r) { int mid=a[(l+r)/2]; int i=l,j=r,p; 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) qsort(l,j); if(i<r) qsort(i,r); } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); qsort(1,n); for(int i=1;i<=n;i++) printf("%d ",a[i]); return 0; }
6.sort函数(这部分就不介绍了,想学的去网上找吧)
#include<cstdio> #include<algorithm> #define N 100000+100 using namespace std; int a[N],n; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1); for(int i=1;i<n;i++) printf("%d ",a[i]); printf("%d",a[n]); return 0; }
习题部分:
#include<cstdio> #include<algorithm> #define N 100000+100 using namespace std; int a[N],n; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1); for(int i=1;i<n;i++) printf("%d ",a[i]); printf("%d",a[n]); return 0; }
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[1001][1001]; structnode{ int ID; int sum; }s[1001]; int cmp(node q,node p){ if(q.sum!=p.sum)return q.sum>p.sum; else return q.ID<p.ID;} int main(){ int i,j,N,M,id,b[1001]; memset(b,0,sizeof(b)); memset(s,0,sizeof(s)); cin>>id>>N>>M; for(i=1;i<=N;i++) for(j=1;j<=M;j++) cin>>a[i][j]; for(j=1;j<=M;j++) for(i=1;i<=N;i++) if(a[i][j]==0)b[j]++; for(i=1;i<=N;i++) { s[i].ID=i; for(j=1;j<=M;j++) if(a[i][j]==1)s[i].sum+=b[j]; } sort(s+1,s+1+N,cmp); for(i=1;i<=N;i++) if(s[i].ID==id){cout<<i;break;} return 0; }
以上是关于各种排序算法整理(附带习题及代码)的主要内容,如果未能解决你的问题,请参考以下文章