有一个数组,内放10个整数,要求找出最小的数和它的下标,然后把它和数组中最前面的元素对换。

发布于:2021-09-22 03:47:13

***知识点数组与循环的灵活运用。


是不是第一次看到题就会产生疑惑,什么是下标?怎么找到数组中最小的值?而且还要和最前面的元素互换!


别着急,我们一步一步来分析:


    数组的下标,比如在给定一个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
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

相关推荐

最新更新

猜你喜欢