***知識點:數組與循環的靈活運用。
是不是第一次看到題就會產生疑惑,什麼是下標?怎麼找到數組中最小的值?而且還要和最前面的元素互換!
彆着急,我們一步一步來分析:
- 數組的下標,比如在給定一個array[3]數組後,內有{1,2,3}三個元素,對應的array[0]就是1這個元素的下標。因爲計算機是從 0 開始索引的。
爲了更好的讓你們理解,這裏我轉發一位博客園@落霞與孤鶩齊飛! 的日誌
爲什麼數組的下標都是從0開始而不是1?
-
假如數組的首地址 是 base_address 如果索引從 1 開始計,元素 a[1] 是第一個元素,它的地址就是
base_address,當我們要獲取第 8 個元素 a[8] 的數據時,計算機就要找到元素 a[8] 所在的地址,計算公式就是
base_address + (8-1)* type_size 。如果索引從 0 開始計,元素 a[0] 是第一個元素,它的地址就是 base_address,當我們要獲取第 8 個元素 a[7]
的數據時,計算機就要找到元素 a[7] 所在的地址,計算公式就是 base_address + 7 * type_size 。我們發現,索引從 0
開始,尋址時會少做一次減法,這就是一個優化,別小看這種優化,計算的數量一旦上去,比如上億次計算,那積累起來的優勢是相當可觀的。
其實,各種算法的優化,本質都是一樣的,讓計算機做更少的計算,只有做的事情少了,效率纔會提高。
- 找出數組最小數的下標,首先用循環給數組賦值(結束循環),將數組中下標爲0的值賦給一個變量名(Min)。
int Subscript;
int Min;
int array[10];
cout << "請輸入十個數:" << endl;
for (int i = 0; i < 10; i++)
cin >> array[i];//利用循環給數組賦值
Min = array[0];//將數組下標爲0的元素賦給Min
- 再用循環,if判斷數組的循環值 i 是否小於Min,如果有,則將這個值賦給Min。繼續循環,直到滿足循環條件,數組中最小的那個數賦給Min,那麼最小值就已經出現。最小值出現了,下標也就知道了。
for (int i = 0; i < 10; i++)
{
if (array[i] < Min)//如果數組中i下標的元素小於Min,則將它賦給Min
{
Min = array[i];//最小值
Subscript = i;//下標
}
}
cout << "最小數是:" << Min
<< " 它的下標是:" << Subscript << endl;
- 找到最小數和下標後,接下來就要將這個數和數組中最前面的數進行交換了,也就是下標爲 0 的元素。
- 用最小數的下標與下標爲 0 的元素進行交換,交換方法這裏就不再贅述了。
cout << "元素對換前:" << endl;
for (int i = 0; i < 10; i++)
cout << array[i]<<" ";
cout << endl;
//交換下標,相等於交換元素
int temp = array[0];
array[0] = array[Subscript];
array[Subscript] = temp;
cout << "元素對換後:" << endl;
for (int i = 0; i < 10; i++)
cout << array[i]<<" ";
代碼演示
#include<iostream>
using namespace std;
int main()
{
int Subscript;
int Min;
int array[10];
cout << "請輸入十個數:" << endl;
for (int i = 0; i < 10; i++)
cin >> array[i];//利用循環給數組賦值
cout << endl;
Min = array[0];//將數組下標爲0的元素賦給Min
for (int i = 0; i < 10; i++)
{
if (array[i] < Min)//如果數組中i下標的元素小於Min,則將它賦給Min
{
Min = array[i];
Subscript = i;
}
}
cout << "最小數是:" << Min << " 它的下標是:" << Subscript << endl;
cout << "元素對換前:" << endl;
for (int i = 0; i < 10; i++)
cout << array[i]<<" ";
cout << endl;
int temp = array[0];
array[0] = array[Subscript];
array[Subscript] = temp;
cout << "元素對換後:" << endl;
for (int i = 0; i < 10; i++)
cout << array[i]<<" ";
return 0;
}
輸入十個數:
12 23 11 34 56 33 6 2 1 7
最小數是:1 它的下標是:8
元素對換前:
12 23 11 34 56 33 6 2 1 7
元素對換後:
1 23 11 34 56 33 6 2 12 7