1

こんにちは私は乱数を挿入する配列を作成しようとしていますが、挿入すると、配列は維持された順序のままになります。たとえば、配列に10 20 30が含まれ、乱数が11の場合、関数はそれを10の後に置き、20と30をリストの下に移動します。関数の要件は次のとおりです。

  • insertNumberは、指定された乱数を配列に挿入し、順序を維持します。
  • データ配列には、インデックス0からサイズ-2までのソートされた順序で整数が含まれています。
  • randomNumは挿入される整数です
  • dataは、ソートされた整数を含む配列です
  • sizeは、配列が保持できる要素の総数です。

これが私のこれまでのコードです。出力に何も表示されません。

#include"utils.h" 

void insertNumber(int randomNum, int data[], int size)
{
    for(int i = 0; i < 10; i++)
    {
        randomNum = data[i];
        if (randomNum > data[i] && i < size - 2)
        {
            for ( int j = 0; j < 10; j--)
            {
                data[i+1] = data [i];
                i--;
            } 
        }
        data[i] = randomNum;
    }
}

void display(int data[],  int size)
{
    for (int i = 0; size < 10; i++)
    {
        cout << " " << data[i];
    }

}
4

4 に答える 4

4

アルゴリズムを使用std::lower_boundして挿入位置を設定し、コンテナーを使用してメソッドstd::vectorで要素をシフトできますinsert

于 2012-08-26T19:12:19.977 に答える
1

BinarySearch を使用して配列を検索し、乱数が存在するかどうかを確認できます。存在する場合は、既存のものの近くに挿入できます。

void binary_search(int A[], int key, int imin, int imax)
{
  if (imax < imin):
    // Insert key as the next element after imax
  else
    {
      // calculate midpoint to cut set in half
      int imid = midpoint(imin, imax);

      // three-way comparison
      if (A[imid] > key)
        // key is in lower subset
        binary_search(A, key, imin, imid-1);
      else if (A[imid] < key)
        // key is in upper subset
        binary_search(A, key, imid+1, imax);
      else
        // key has been found so insert it after imax
    }
}
于 2012-08-26T19:27:47.347 に答える
0

これはそれを実装するためのより良い方法ではないでしょうか?

#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
#include <cstdlib>

int main() {
    std::vector<int> randomInts;
    srand(time(0));
    for(int i = 0; i < 10; i++)
        randomInts.push_back((rand()%30)+1); //Inserts random numbers 1-30.

    std::sort(randomInts.begin(),randomInts.end());
    for(auto i : randomInts)
        std::cout << i << " ";
}

出力:3 6 9 13 14 16 19 20 25 30

于 2012-08-26T19:24:07.410 に答える
-1

関数内でそれより大きい要素を見つけた後、乱数を挿入します

for( i =0; i<size ;i++)
{
    if(data[i] > randomNumber)
    {
         valueToPush = data[i];
         data[i] = randomNumber;
         randomNumber = valueToPush;
    }
}
data[size] = randomNumber
于 2012-08-26T19:40:13.917 に答える