排序模板(从小到大)
2016-11-18 12:01
239 查看
1.函数排序(最粗暴的)
2.插入排序O(n^2)
3. 冒泡排序
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;
}
#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;
}
相关文章推荐
- 用同一个函数名对n个数据进行从小到大排序 用函数模板
- 《硬啃设计模式》 第26章 万能排序 - 模板方法模式(Template Method Pattern)
- 第14周项目一排序函数模板
- silverlight DataGridTemplateColumn 模板列 排序
- 【Python】Python_learning6:Python中的sort排序函数之序列排序-从小到大&从大到小
- 简单排序模板
- NOIP复赛复习(六)算法分析与排序模板
- C#将集合key键以ASCII码从小到大排序
- 快速排序【模板】
- 题目41_三个数从小到大排序
- js对数组中的数字从小到大排序实现代码
- 一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- HDU-1106 快排模板 和 基数排序
- poj 2007 Scrambled Polygon (极角排序模板题)
- 【模板小程序】链表排序(qsort/insert_sort/merge_sort)
- 利用c++模板实现快速排序
- 三个数从小到大排序
- [模板]归并排序
- [置顶] API 校验 sign 值 按照ASCII码从小到大排序增加MD5加密