0

選択ソート アルゴリズムをコーディングしようとしています (ユーザーが入力した 10 個の数字のランダムなセットを取得し、昇順でリストを出力します)。アルゴリズムがどのように機能するかを理解しており、それを理解していると思っていましたが、for ループの何かが期待どおりに機能しておらず、それが何であるかを理解することはできません。 .

私が遭遇している問題の例を次に示します: 入力 {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, 出力 {0, 1, 2, 3, 4, 9, 6 、7、8、9}

5 番目のインデックスは、入力した数値に関係なく、常にずれているように見えます。ただし、元の数値セットに特定の数値の倍数が含まれている場合は、特定するのが難しい他のエラーが発生します。5番目のインデックスの問題を解決した後、他の問題が解決されるか、少なくとも特定が容易になることを願っています.

以下は、私のメイン関数全体です(実際にメインと呼ばれる部分を除いたものです)。

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 に答える