算法学习 1.1桶排序

(今天开始学习啊哈算法,这本算法数真的挺好的,不管处于什么阶段的算法学习都可以借鉴,我就把自己的学习心得同大家分享分享,坚持每日更新,加油!下面我附上这本书的图片,感兴趣的朋友可以去买一本看看哈)
在这里插入图片描述

第一节 桶排序算法(简化版)

  1. 生活中到处都是被排序的东西,最为常见的就是数字了,桶排序算法就是借用一个一位数组去解决排序问题。(仔细想想哦)
  2. 仔细想想其实排序就是把一堆数字放在他应该存在的地方,那么在一位数组里,我们只需要把自己需要排序的数放在他所对应的位置就行了。例如:1我们就可以把它放在a[1]这个位置
  3. 位置解决了,那么假如一个需要排序的数字出现了多次呢?我们可以用数字来表示其出现的次数,例如:1这个数字出现了2次,那么我们就可以让a[1]=2;然后循环时输出两次,就可以解决这个问题了。文字叙述可能有点抽象,我们用图片:
    1
    通过图片,我们可以看出,未排序之前,所有数的位置为0;哪一个数出现就将哪一个数的位置的数字++;
  4. 我们来做一个简单地小测试,将5,5,5,2,8这五个数由小到大排序:代码:
#include <stdio.h>

int main()
{
	int a[11], i, j, t;
	for (i = 0; i <=10; i++)
	{
		a[i] = 0; //将每个位置初始化为0
	}
	for (i = 1; i <=5; i++)  //循环读入5个数
	{
		printf("请输入第%d个数:", i);
		scanf("%d", &t);
		printf("\n");
		a[t]++;
	}
	for(i=0;i<=10;i++)
		for (j = 1; j <= a[i]; j++)   //出现几次就打印机次
		{
			printf("%d", i);
		}
	return 0;
}

按照上述想法写成代码得到测试结果:
在这里插入图片描述
如果想要由大到小输出,仅需将代码循环改成:for(i=10;i>=0;i–)即可。

  1. 测试完了0~10,我们来试试0 ~ 1000的数排序,我们需要定义一个book[1001]的数组:
#include <stdio.h>

int main()
{
	int book[1001], i, j, t,n;
	int f = 1;
	for (i = 0; i <=1000; i++)
	{
		book[i] = 0; //将每个位置初始化为0
	}
	while (f == 1)
	{
		printf("请输入需要排序的个数:");
		scanf("%d", &n);
		printf("\n");
		if (n <= 1000)
		{
			break;
		}
		else
		{
			f = 1;
		}
	}
	for (i = 1; i <=n; i++)  //循环读入n个数
	{
		printf("请输入第%d个数:", i);
		scanf("%d", &t);
		printf("\n");
		book[t]++;
	}
	printf("由小到大为:");
	for(i=0;i<=1000;i++)
		for (j = 1; j <= book[i]; j++)   //出现几次就打印机次
		{
			printf("%d", i);
			printf(",");
		}
	return 0;
}

结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值