您的位置:首页 > 其它

排序模板(从小到大)

2016-11-18 12:01 239 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: