排序算法小结
来源:互联网 发布:美工学习 编辑:程序博客网 时间:2024/06/16 05:33
各种排序
一.稳定排序
1.记数排序
2.基数排序
3.插入排序
4.冒泡排序
5.归并排序
二.不稳定排序
1.选择排序
2.快速排序
3.堆排序
4.希尔排序
计数排序
int cnt[105],A[105],B[105];void sort(int n){ FOR(i,1,n){ int x; scanf("%d",&A[i]); cnt[A[i]]++; } FOR(i,1,100){ cnt[i]+=cnt[i-1]; } FOR(i,1,n){ B[cnt[A[i]]]=A[i]; cnt[A[i]]--; }//B为排好序后的数组 }
基数排序
const int P=(1<<16)-1;const int N=1<<16; int A[100005];int B[100005];int cnt[N+5];void sort(int n){ memset(cnt,0,sizeof(cnt)); FOR(i,1,n)cnt[A[i]&P]++; FOR(i,1,N)cnt[i]+=cnt[i-1]; DOR(i,n,1)B[cnt[A[i]&P]--]=A[i]; memset(cnt,0,sizeof(cnt)); FOR(i,1,n)cnt[(B[i]>>16)&P]++; FOR(i,1,N)cnt[i]+=cnt[i-1]; DOR(i,n,1)A[cnt[(B[i]>>16)&P]--]=B[i];}
插入排序
int A[10005];int B[10005];void sort(int n){ FOR(i,1,n){ int j; for(j=i-1;j>0;j--){ if(B[j]<=A[i])break; B[j+1]=B[j]; } B[j+1]=A[i]; }}
冒泡排序
int A[10005];void sort(int n){ FOR(i,1,n){ FOR(j,1,n-i){ if(A[j]>A[j+1])swap(A[j],A[j+1]); } }}
归并排序
int A[10005],tmp[10005];void sort(int l,int r){ if(l>=r)return; int mid=(l+r)>>1; sort(l,mid); sort(mid+1,r); int i=l,j=mid+1,k=l; while(i<=mid&&j<=r){ if(A[i]>A[j])tmp[k++]=A[j],j++; else tmp[k++]=A[i],i++; } while(i<=mid)tmp[k++]=A[i],i++; while(j<=r)tmp[k++]=A[j],j++; FOR(i,l,r)A[i]=tmp[i];}
选择排序
int A[10005];void sort(int n){ FOR(i,1,n){ int k=i; FOR(j,i+1,n){ if(A[j]<A[k])k=j; } if(k!=i)swap(A[i],A[k]); }}
快速排序
int A[10005];void sort(int l,int r){ int i=l,j=r,key=A[l]; while(i<j){ while(i<j&&A[j]>=key)j--; if(i<j)A[i]=A[j]; while(i<j&&A[i]<=key)i++; if(i<j)A[j]=A[i]; } A[i]=key; if(l<i-1)sort(l,i-1); if(i+1<r)sort(i+1,r);}
堆排序
int n;int A[10005];void down(int p){ while(2 *p<=n){ int t=2*p; if(t+1<=n&&A[t+1]<A[t])t++; if(A[p]<A[t])break; swap(A[p],A[t]); p=t; }}int top(){return A[1];}void pop(){ A[1]=A[n--]; down(1);}void sort(int n){ DOR(i,n/2,1)down(i); int m=n; FOR(i,1,m){printf("%d ",top());pop();}}
希尔排序
void sort(int n){ int gap,i,j,temp; for (gap=n/2;gap>0;gap/=2){ for(i=gap;i<=n;i++) for(j=i-gap;j>=1&&A[j]>A[j+gap];j-=gap){ temp = A[j]; A[j] = A[j+gap]; A[j+gap] = temp; } }}
阅读全文
1 0
- 排序算法小结
- 排序算法小结
- 排序算法小结
- 排序算法小结(转)
- 排序算法小结
- 排序算法小结
- 排序算法小结
- 各种排序算法小结
- 各种排序算法小结
- C 排序算法小结
- 各种排序算法小结
- 排序算法小结(C++)
- (转)排序算法小结
- 排序算法小结
- 排序算法小结
- 排序算法小结
- (转)排序算法小结
- 排序算法小结[zz]
- nodeJs之准备工作
- 网络框架okHttp源码分析
- HDU 4436 str2int
- TypeScript入门知识三(表达式和循环)
- Dialog 使用方法详解
- 排序算法小结
- Python中is和==的具体解释
- Roads in the North POJ
- hdoj 5974 A Simple Math Problem
- SVN的安装与常用功能使用以及解决安装配置过程中的一些错误
- 自定义加载 PopupWindow
- Java面试笔试指南(三)---关键字
- 优化
- Tarjan算法 计算有向图的强连通量(可作为模板)-------CCF CSP 高速公路