前言
(1)我是一個(gè)大三的學(xué)生(準(zhǔn)確來說應(yīng)該是準(zhǔn)大三,因?yàn)槊魈觳艌?bào)名哈哈哈)。
(2)最近就想每天閑著沒事也刷些C語言習(xí)題來鍛煉下編程水平,也一直在思考企業(yè)對應(yīng)屆大學(xué)生能力的要求,所以經(jīng)常會想到關(guān)于面試的事情。由于我也沒實(shí)習(xí)過,所以我對面試沒有一個(gè)具象化的概念。
(3)好在我會動(dòng)用網(wǎng)絡(luò)去搜集信息,我打開了CSDN查了下“C語言編程每日一練”,就發(fā)現(xiàn)了“C語言面試題每日一練‘’的文章,其中我發(fā)現(xiàn)了,嵌入式面試對數(shù)據(jù)結(jié)構(gòu)與算法的要求也不低,所以我要特地花時(shí)間去提升下我的數(shù)據(jù)結(jié)構(gòu)與算法的能力了,不能啥也不知道哇!
本章目標(biāo)
- 掌握簡化版桶排序的使用場景和代碼架構(gòu)
- 會用簡化版桶排序解決一些問題
簡化版桶排序
簡化版桶排序的思路就是,如果要對數(shù)據(jù)范圍是0~10的整數(shù)就行排序,那么我們需要11個(gè)桶,即一個(gè)大小為11的數(shù)組,每個(gè)元素來表示0到10之間每個(gè)數(shù)出現(xiàn)的次數(shù),因?yàn)閿?shù)組的元素由a[0]到a[10]來排列,a[0]里面裝的是數(shù)字0的個(gè)數(shù),a[1]里面裝的是數(shù)字1的個(gè)數(shù),以此類推;最后按a[0]至a[10]的順序或者是a[10]到a[0]的順序來輸出數(shù)組的元素,就可以實(shí)現(xiàn)對原數(shù)據(jù)進(jìn)行從小到大或者是從大到小的順序排列。
題目一
題目:讓計(jì)算機(jī)隨機(jī)讀入5個(gè)數(shù),數(shù)的大小范圍是0~10;然后將這5個(gè)數(shù)從大到小輸出。
思路:借助一個(gè)一維數(shù)組。
- 從小到大輸出
#include <stdio.h>
int main()
{
int a[10], i, j, t;
for (i = 0; i <= 10; i++)
a[i] = 0; //初始化一維數(shù)組為0
for (i = 1; i <= 5; i++) //循環(huán)讀入5個(gè)數(shù)
{
scanf("%d",&t); //把每一個(gè)數(shù)讀入到變量t中
a[t]++; //進(jìn)行計(jì)數(shù)
}
for (i = 0; i <= 10; i++)
for (j = 1; j <= a[i]; j++)
printf("%d ",i);
getchar(); getchar();
//這里的getchar();用來暫停程序,以便查看程序輸出內(nèi)容
//也可以用system("pause");等來代替
return 0;
}
- 從大到小排序
#include <stdio.h>
int main()
{
int a[10], i, j, t;
for (i = 0; i <= 10; i++)
a[i] = 0; //初始化一維數(shù)組為0
for (i = 1; i <= 5; i++) //循環(huán)讀入5個(gè)數(shù)
{
scanf("%d",&t); //把每一個(gè)數(shù)讀入到變量t中
a[t]++; //進(jìn)行計(jì)數(shù)
}
//i就是輸入的數(shù)值,a[i]就是i的個(gè)數(shù)
for (i = 10; i >= 0; i--) //改這里就可以決定是從大到小排序還是從小到大排序
for (j = 1; j <= a[i]; j++)
printf("%d ",i);
getchar(); getchar();
//這里的getchar();用來暫停程序,以便查看程序輸出內(nèi)容
//也可以用system("pause");等來代替
return 0;
}
題目二
題目:輸入n個(gè)0~1000之間的整數(shù),將它們從大到小排序。
思路:對數(shù)據(jù)范圍在0到1000的整數(shù)排序,我們需要1001個(gè)桶,來表示0~1000之間每一個(gè)數(shù)出現(xiàn)的次數(shù)。
從大到小輸出。文章來源:http://www.zghlxwxcb.cn/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); //輸入一個(gè)數(shù)n,表示接下來有n個(gè)數(shù)
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;
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-689979.html
到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí)(day1)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!