前言
(1)我是一个大三的学生(准确来说应该是准大三,因为明天才报名哈哈哈)。
(2)最近就想每天闲着没事也刷些C语言习题来锻炼下编程水平,也一直在思考企业对应届大学生能力的要求,所以经常会想到关于面试的事情。由于我也没实习过,所以我对面试没有一个具象化的概念。
(3)好在我会动用网络去搜集信息,我打开了CSDN查了下“C语言编程每日一练”,就发现了“C语言面试题每日一练‘’的文章,其中我发现了,嵌入式面试对数据结构与算法的要求也不低,所以我要特地花时间去提升下我的数据结构与算法的能力了,不能啥也不知道哇!
本章目标
- 掌握简化版桶排序的使用场景和代码架构
- 会用简化版桶排序解决一些问题
简化版桶排序
简化版桶排序的思路就是,如果要对数据范围是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个数从大到小输出。
思路:借助一个一维数组。
- 从小到大输出
#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;
}
- 从大到小排序
#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之间每一个数出现的次数。
从大到小输出。文章来源:https://www.toymoban.com/news/detail-689979.html
#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;
}
文章来源地址https://www.toymoban.com/news/detail-689979.html
到了这里,关于数据结构与算法学习(day1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!