四种排序方式
选择排序,冒泡排序,插入排序,桶排序。
我还只是个孩子为什么要学这玩意。
一:选择排序:“以前我没得选择,现在我想做个排序”
首先输入n个数字,固定第一个数字不变,从它的下一个数字开始寻找,如果找到比第一个数字小的数,就交换下标,接着向下寻找,如果找到比上一个所找的数字小的数便继续交换下标,直到比较完所有数字,第一个最小的数字就随之确定了。重复以上过程,直到最后一个数字。
代码:
#include<iostream>
using namespace std;
int main()
{
int n,i,j,k,sum,a[1000000];
cin>>n;
for(i=0;i<n;i++) //
cin>>a[i]; //输入数据
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(a[j]>a[k]) //进行比较
K=j; //交换下标
}
sum=a[i]; //
a[i]=a[k]; //
a[k]=sum; //交换对应下标值
}
for(i=0;i<n;i++) //
cout<<a[i]<<" "; //输出排序结果
return 0;
}
二:冒泡排序:“我只是想吐个泡泡而已,排个啥子序”
首先输入n个数字,先比较第一个和第二个数字,如果第一个数比第二个数大,就交换数,再比较第二个和第三个数字,如果第二个数字比第三个数字大,就交换数字…一直比较到最后一个和倒数第二个数字,最大的数字便被排列在最后。重复以上过程,直到第一个数字被确定。
代码:
#include<iostream>
using namespace std;
int main()
{
int n,i,j,sum,a[1000000];
cin>>n;
for(i=0;i<n;i++) //
cin>>a[i]; //输入数据
for(i=1;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(a[j]>a[j+1]) //比较大小
{
sum=a[j]; //
a[j]=a[j+1]; //
a[j+1]=sum; //交换坐标
}
}
}
for(i=0;i<n;i++)
cout<<a[i]<<" "; //输出排序结果
return 0;
}
三:插入排序:“插入无效,谢谢合作”
首先输入n个数字,从第二个数字开始,如果比前面的数字小,就将这个数字与前面交换,再拿取第三数字,如果比前一个数字小就交换数字,再与第一个数字比较,如果比它小就交换,再拿取第四个数字…直到最后一个数字被拿取并放置在指定位置。
代码:
#include<iostream>
using namespace std;
int main()
{
int i,j,k,n,t,a[1000];
cin>>n;
for(i=0;i<n;i++)
cin>>a[i]; //输入数据
for(i=0;i<n;i++)
{
for(j=i-1;j>=0;j--)
if(a[i]>a[j])break; //比较大小
t=a[i]; //
for(k=i-1;k>j;k--) //
a[k+1]=a[k]; //
a[k+1]=t; //更换数值
}
for(i=0;i<n;i++)
cout<<a[i]<<" "; //输出排序结果
return 0;
}
四:桶排序:“我明明是装水的好吧。”
首先输入n个数字,将其放在下表为其本身的桶中,再从0开始,一直到最大定额的桶的下标,如果桶中数量不为零,则输出桶的标号,如果桶中个数不只有一个,再输出后,将桶中的这数扔掉(即将桶自减),接着看桶中是否还有数,有则继续输出,没有则接着看下一个桶,直到把最后一个桶看完。
注:桶排序不适用于小数以及跨度较大需要开较多桶的题目。
代码:
#include<iostream>
using namespace std;
int main()
{
int tong[101]={0},n,i,j,k;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>k;
tong[k]++; //输入数据
}
for(i=0;i<=100;i++)
while(tong[i]>0) //判断桶中是否有数字
{
cout<<i<<" "; //输出排序结果
tong[i]--; //桶中数字个数更新
}
cout<<endl;
return 0;
}
嗯…祝大家平安。