0

我正在尝试编写一个选择排序算法(随机输入十个数字,由用户输入,并按升序输出列表)。我了解该算法应该如何工作,并认为我已经弄清楚了,但是 for 循环中的某些东西并没有按照我期望的方式工作,而且我终其一生都无法弄清楚它是什么.

这是我遇到的问题的示例:输入 {9, 8, 7, 6, 5, 4, 3, 2, 1, 0},输出 {0, 1, 2, 3, 4, 9, 6 , 7, 8, 9}

无论我输入什么数字,第五个索引似乎总是关闭。但是,如果原始数字集具有任何给定数字的倍数,那么就会出现其他难以查明的错误。我希望在解决第五个索引问题后,其他问题将得到解决,或者至少更容易查明。

下面是我的主要功能的全部(减去它实际说的主要部分)。

int arr[10];//array of integers input by user
int num;    //smallest number in array
int temp;   //temp variable for swapping numbers
int ind;    //index of where temp was found

cout << "Enter ten random integers: " << endl;
for(int i=0; i<10; i++)
{
    cout << "[" << i << "] = ";
    cin >> arr[i];
}

cout << endl;

for (int j=0; j<10; j++)
{
    num = arr[j];
    temp = arr[j];

    for (int k=j; k<10; k++) /*after this loop, temp should have lowest int and ind
                               should have its location*/
    {
        if(temp > arr[k])
        {
            temp = arr[k];
            ind = k;
        }
    }
    arr[j] = temp;
    arr[ind] = num;
}

for(int l = 0; l<10; l++)
{
    cout << arr[l] << " ";
}
4

1 回答 1

0
temp = arr[0]; // You need to set it to sth diferent then 0

for(int i=0; i<10; i++)
{
    if(arr[k] < temp)
    {
           temp = arr[k];
           ind = k;
    }
}

并做了。

对于排序(123):

  for (i = 10; i > 0; i--)
  {
    for (j = 1; j <= i; j++)
    {
      if (numbers[j-1] > numbers[j])
      {
        temp = numbers[j-1];
        numbers[j-1] = numbers[j];
        numbers[j] = temp;
      }
    }
  }

和反向 (321)

  for (i = 10; i > 0; i--)
  {
    for (j = 1; j <= i; j++)
    {
      if (numbers[j-1] < numbers[j])
      {
        temp = numbers[j-1];
        numbers[j-1] = numbers[j];
        numbers[j] = temp;
      }
    }
  }
于 2013-01-17T22:47:29.723 回答