四种排序方式

四种排序方式

选择排序,冒泡排序,插入排序,桶排序。
我还只是个孩子为什么要学这玩意。

一:选择排序:“以前我没得选择,现在我想做个排序”
首先输入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;
 } 

嗯…祝大家平安。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值