【2018年山西大學(xué)真題】試編寫(xiě)一個(gè)算法,使之能在數(shù)組L【1~n】中找到最小元素。
(1)給出算法的基本思想。
(2)根據(jù)設(shè)計(jì)思想,給出描述算法。
(3)分析所給算法的時(shí)間復(fù)雜度。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-759738.html
(1)算法基本思想:
1.?假設(shè)數(shù)組中的第一個(gè)元素為當(dāng)前的最小元素,將其保存在一個(gè)變量?`min_element`?中。
2.?從數(shù)組的第二個(gè)元素開(kāi)始遍歷,比較遍歷到的元素和?`min_element`?的大小。
3.?如果遍歷到的元素小于?`min_element`,則更新?`min_element`?的值為遍歷到的元素的值。
4.?繼續(xù)遍歷數(shù)組,重復(fù)步驟?2?~?3?直到遍歷完整個(gè)數(shù)組。
5.?返回?`min_element`?即為數(shù)組中的最小元素。
(2)根據(jù)上述設(shè)計(jì)思想,可以用?C?語(yǔ)言編寫(xiě)以下算法:
```c
#include?<stdio.h>
int?findMinElement(int*?arr,?int?n)?{
????if?(arr?==?NULL?||?n?<=?0)?{
????????return?-1;??//?錯(cuò)誤的輸入
????}
????int?min_element?=?arr[0];???//?假設(shè)數(shù)組的第一個(gè)元素為最小元素
????for?(int?i?=?1;?i?<?n;?i++)?{
????????if?(arr[i]?<?min_element)?{
????????????min_element?=?arr[i];???//?更新最小元素
????????}
????}
????return?min_element;???//?返回最小元素
}
int?main()?{
????int?arr[]?=?{9,?5,?2,?7,?6,?1,?4,?3};
????int?n?=?sizeof(arr)?/?sizeof(arr[0]);
????int?min_element?=?findMinElement(arr,?n);
????printf("數(shù)組的最小元素為:%d\n",?min_element);
????return?0;
}
```
```
數(shù)組的最小元素為:1
```
(3)分析時(shí)間復(fù)雜度:
在算法中,需要遍歷整個(gè)數(shù)組一次,所以時(shí)間復(fù)雜度為?O(n),其中?n?是數(shù)組的長(zhǎng)度。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-759738.html
到了這里,關(guān)于考研真題數(shù)據(jù)結(jié)構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!