最快最简单的排序——桶排序

1、简单的桶排序

《啊哈!算法》第一章第一节,讲的是简单的桶排序。当我看完相关知识以及例题的时候,觉得这种桶排序在我的生活中有很多缩影。例如我可爱的女儿贝壳,她总会把指定的玩具放到它应该去的地方又比如小时候选取班干部投票的时候,我们会把含有候选人名字的票数以“正”字的记录方式,计票到每名候选人的名下.…当然这只是最简单的桶排序,如何用C++实现一个简单的桶排序呢?我们来搞一下!

2、例题

贝壳班上只有5个同学,他们的考试成绩分别为5,3,5,2,8分(10分制),现在我们要用代码进行一个排序,使得排序后的结构为8 5 5 3 2。Just Do It

这里我们可以分析一下问题:
①桶是什么?
②要把什么放到桶里?
③有多少个桶?

我们来看图!

桶排序
我们要做的是按照同学的得分,把每名同学放到对应桶子里,这样我们就可以得到上面问题的答案:

①桶是所有可能的分数的分布 ;
②把不同得分的同学放到对应桶子里;
③根据10分制来说,一共会用11个桶

3、C++代码

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

int main()
{
	int a[11]; // 定义11个桶
	int t;
	for (int i = 0; i <= 10; i++)
	{
		a[i] = 0; //初始化为0
	}

	cout << "请输入5个人的分数" << endl;
	for (int i = 0; i < 5; i++) 
	{		
		cin  >> t;
		if (t > 10)
		{
			cout << "分数输入有误!" << endl;
			return 0;
		}

		// 行进计数
		a[t]++; 
	}

	cout << "排序结果为:" ;
	// 倒叙遍历桶
	for (int  i = 10; i > 0; i--) 
	{
		// 当桶个数不为0的时候,我们输出桶的编号i,当桶中数量a[i]>1时,也可以重复输出i
		for (int j = 1; j <= a[i]; j++) 
		{
			cout << i << " ";
		}
	}

	cout << endl;
	system("pause");
	return 0;
}

4、关于时间复杂度的分析

代码中总共出现了两个独立循环一个嵌套循环。第一个独立循环执行了n次(n代表桶的个数),第二个循环一共执行了m次(m代表放入桶中的样本数量),第三个嵌套循环一共执行了m+n次。整个算法的时间复杂度是O(2(m+n)),即O(M+N) 。但是这是简化版的桶排序(书上是这么告诉我的),同样书中给我抛出了一个疑问!我怎么知道哪个是贝壳的成绩?有道理,考的好要奖励,考的不好可能就是小柳条炒肉了!应该会有解决方法,期待后续的学习!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值