数据结构与算法学习(day1)——简化版桶排序

前言

(1)我是一个大三的学生(准确来说应该是准大三,因为明天才报名哈哈哈)。

(2)最近就想每天闲着没事也刷些C语言习题来锻炼下编程水平,也一直在思考企业对应届大学生能力的要求,所以经常会想到关于面试的事情。由于我也没实习过,所以我对面试没有一个具象化的概念。

(3)好在我会动用网络去搜集信息,我打开了CSDN查了下“C语言编程每日一练”,就发现了“C语言面试题每日一练‘’的文章,其中我发现了,嵌入式面试对数据结构与算法的要求也不低,所以我要特地花时间去提升下我的数据结构与算法的能力了,不能啥也不知道哇!

本章目标

  1. 掌握简化版桶排序的使用场景和代码架构
  2. 会用简化版桶排序解决一些问题

简化版桶排序

简化版桶排序的思路就是,如果要对数据范围是0~10的整数就行排序,那么我们需要11个桶,即一个大小为11的数组,每个元素来表示0到10之间每个数出现的次数,因为数组的元素由a[0]到a[10]来排列,a[0]里面装的是数字0的个数,a[1]里面装的是数字1的个数,以此类推;最后按a[0]至a[10]的顺序或者是a[10]到a[0]的顺序来输出数组的元素,就可以实现对原数据进行从小到大或者是从大到小的顺序排列。

题目一

题目:让计算机随机读入5个数,数的大小范围是0~10;然后将这5个数从大到小输出。

思路:借助一个一维数组。

  1. 从小到大输出
#include <stdio.h>
int main()
{
	int a[10], i, j, t;
	for (i = 0; i <= 10; i++)
		a[i] = 0;     //初始化一维数组为0

	for (i = 1; i <= 5; i++)   //循环读入5个数
	{
		scanf("%d",&t);        //把每一个数读入到变量t中
		a[t]++;                //进行计数
	}

	for (i = 0; i <= 10; i++)
		for (j = 1; j <= a[i]; j++)
			printf("%d ",i);

	getchar(); getchar();
	//这里的getchar();用来暂停程序,以便查看程序输出内容
	//也可以用system("pause");等来代替
	return 0;
}

在这里插入图片描述

  1. 从大到小排序
#include <stdio.h>
int main()
{
	int a[10], i, j, t;
	for (i = 0; i <= 10; i++)
		a[i] = 0;     //初始化一维数组为0

	for (i = 1; i <= 5; i++)   //循环读入5个数
	{
		scanf("%d",&t);        //把每一个数读入到变量t中
		a[t]++;                //进行计数
	}

	//i就是输入的数值,a[i]就是i的个数
	for (i = 10; i >= 0; i--)  //改这里就可以决定是从大到小排序还是从小到大排序
		for (j = 1; j <= a[i]; j++)
			printf("%d ",i);

	getchar(); getchar();
	//这里的getchar();用来暂停程序,以便查看程序输出内容
	//也可以用system("pause");等来代替
	return 0;
}

在这里插入图片描述

题目二

题目:输入n个0~1000之间的整数,将它们从大到小排序。

思路:对数据范围在0到1000的整数排序,我们需要1001个桶,来表示0~1000之间每一个数出现的次数。

从大到小输出。

#include <stdio.h>
int main()
{
	int book[1001], i, j, t, n;
	for (i = 0; i <= 1000; i++)
		book[i] = 0;

	scanf("%d",&n);   //输入一个数n,表示接下来有n个数
	for (i = 1; i <= n; i++)
	{
		scanf("%d",&t);
		book[t]++;
	}

	for (i = 1000; i >= 0; i--)
		for (j = 1; j <= book[i]; j++)
			printf("%d ",i);
	getchar(); getchar();
	return 0;
}

在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦克斯同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值