***知識點:陣列與回圈的靈活運用,
是不是第一次看到題就會產生疑惑,什么是下標?怎么找到陣列中最小的值?而且還要和最前面的元素互換!
別著急,我們一步一步來分析:
- 陣列的下標,比如在給定一個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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/233985.html
標籤:其他
