返回数组中最小元素的索引

时间:2012-11-26 02:57:53

标签: c++ arrays indexing

我正在尝试使用整数数组中的最小元素返回索引。我错过了什么吗?在我将整数放入后,它不会返回索引。

更新:我在int main()结束时收到有关阵列堆栈损坏的错误。谢谢。我的代码如下:

#include <iostream>
#include <conio.h>

using namespace std;

int indexofSmallestElement(double array[], int size);

int main()
{    
int size = 10; 
double array[10];

for (int i = 0; i <= size; i++)
{
    cout << "Enter an integer: " << endl;
    cin >> array[i];
}

indexofSmallestElement(array, size);
}

int indexofSmallestElement(double array[], int size)
{
int index = 0;

if (size != 1)
{

    int n = array[0];
    for (int i = 1; i < size; i++)
    {
        if (array[i] < n)
        {
            n = array[i];
            index = i;
        }
    }
}
return index;
}

3 个答案:

答案 0 :(得分:14)

许多人向您展示了indexofSmallestElement的变体。我将包括我的为什么的解释我认为它更好:

int indexofSmallestElement(double array[], int size)
{
    int index = 0;

    for(int i = 1; i < size; i++)
    {
        if(array[i] < array[index])
            index = i;              
    }

    return index;
}

您会注意到我取消了n变量,该变量用于保存到目前为止遇到的最小值。我这样做是因为,根据我的经验,必须保持两个不同的事物同步可能是微妙的错误的来源。即使在这个简单的情况下,它也是多个错误的来源,其中最重要的是您的n被声明为int,但您分配的类型为{其中{1}}。

底线:取消double变量,只记录一件事:索引。

答案 1 :(得分:3)

应该是n = array[0]而不是array[0] = n。这意味着你假设数组的第一个元素在开头是最小的,然后将它与其他元素进行比较。

此外,在循环中,您超出了数组的范围。 for循环应该运行到i < size而不是i <= size

你的代码应该是这样的..

int indexofSmallestElement(double array[], int size)
{
  int index = 0 ;
  double n = array[0] ;
  for (int i = 1; i < size; ++i)
  {
    if (array[i] < n)
    {
        n = array[i] ;
        index = i ;
    }
  }
 return index;
}

答案 2 :(得分:0)

在循环内部使用array [i]和index = i。大小是边界:)