文章目录
- 前言
- 本章目标
- 简化版桶排序
- 题目一
- 题目二
前言
(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; //初始化一维数组为0for (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; //初始化一维数组为0for (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;
}