
No.10ベストアンサー
- 回答日時:
ポインタを使えばよいのではないでしょうか?
並び替えたい配列を int A[100] と仮定して、
アドレスを入れておく一時的な配列、int *B[100]を用意して、
for( i = 0; i < 100; i++ ) B[ i ] = &A[ i ];
としておきます。
あとは、B[]の要素をランダムに入れ替え、
何らかの処理を *B[ i ] に対して行えばよいですね。
これであれば、元のA[]の内容は変わりますが、
順番は一切変わりませんので、面倒な操作は発生しません。
No.11
- 回答日時:
ある配列(zとします)と同じサイズのint配列を2つ(xとyとします)用意します。
配列のサイズと同じだけ乱数を生成させて配列xの要素に入れます。
配列yの要素には値0から(zのサイズ-1)までの整数値を入れておきます。
xの要素が昇順(降順でもかまわない)に並ぶように、配列z, y, xをソートします。これで、元の配列はランダムに並び替わります。
ある処理が終わったら、配列yの要素が昇順並ぶように、配列zとyを並べ替えます。これで元の配列の順番に戻ります。
No.9
- 回答日時:
>ある配列をランダムに並び替えて、
たとえば、
cHoge[ 0 ] = 0x11;
cHoge[ 1 ] = 0x03;
cHoge[ 2 ] = 0x02;
cHoge[ 3 ] = 0x12;
cHoge[ 4 ] = 0x24; を
cHoge[ 0 ] = 0x03; ( [ 1 ] )
cHoge[ 1 ] = 0x24; ( [ 4 ] )
cHoge[ 2 ] = 0x11; ( [ 0 ] )
cHoge[ 3 ] = 0x02; ( [ 2 ] )
cHoge[ 4 ] = 0x12; ( [ 3 ] ) と
☆ランダム?に並び替え(入れ換え?)、さらに
cHoge[ 0 ] = 0x02;
cHoge[ 1 ] = 0x25;
cHoge[ 2 ] = 0x10;
cHoge[ 3 ] = 0x03;
cHoge[ 4 ] = 0x13; と
☆ある処理(例えば、奇数ならばデクリメント、偶数ならばインクリメント)をしたのち、
cHoge[ 0 ] = 0x10;
cHoge[ 1 ] = 0x02;
cHoge[ 2 ] = 0x03;
cHoge[ 3 ] = 0x13;
cHoge[ 4 ] = 0x25; と
☆元の配列の順番に戻す、ということですね。
★元の配列の「順番」に戻すことが重要で、配列の「値」は、元のままである必要はないのですよね?。
→ No.3 さんの「配列のコピー」ではダメ、ということ?。
★上の例のように、「処理」内容によっては、「ランダムに並び替え」てから、の必要がない場合も、ありですね?。
→ No.6 さんの「配列を並び替えずにランダムな処理」どころか「・・順番どおりの処理」で十分と・・?。
★それとも、処理の「順番」が、「処理内容」に関わってくるのでしょうか?。
→ No.6 さんの
ある処理( hoge[ order[i] ] ); → ある処理( hoge[ order[i] ], order[i] ); とする必要がある処理内容なのでしょうか?。
★それとも、処理の対象は、「配列」そのものではない、ですか?。
以上、(具体的な処理例を、上部のように)補足願います。
>どのように組めばいいのか解りません。
「並び替え」時に用いる変数(順番)を、別の「配列」に順番に記憶(代入)しておくだけ、のような・・。
というか、「並び替え」までのプログラムが、できていない?。
No.7
- 回答日時:
>>5
処理の結果、要素内に変化がある
んじゃないですかね
例えば全要素に+1して順番を戻すなら元の配列で上書きしたらダメですし
というかそれだとx[]に戻さずy[]に対してランダム&処理&廃棄、でいいような
No.6
- 回答日時:
Cで配列を並び替えるのはあまり効率が良くないと思いますが。
「ある処理」を行うランダムな順番を別の配列に取得して、その順番に沿って「ある配列」を処理するのではいけませんか。
hoge[n]; /* ある配列 */
order[n]; /* 処理順 */
/* order[n]に0~(n-1)のランダムな一意の数値を格納 */
...
for(i = 0; i < n; i++)
{
ある処理(hoge[order[i]]);
}
これなら配列を並び替えずにランダムな処理が行えます。
No.5
- 回答日時:
ある配列をx[]とする。
x[]の全要素を別の配列y[]にそっくりコピーする。
この時点で、全く同じ内容のx[]とy[]が存在する。
x[]の内容をランダムに並べ替える。
ある処理を行なう。
y[]の全要素をx[]にそっくりコピーする。
これで、
>ある配列をランダムに並び替えて、ある処理をした後にまた元の配列の順番に戻したい
これが実現できていませんか?
No.4
- 回答日時:
>「コピーしておいた配列から元に戻す」
>とは具体的にどのようなことをすればよいのですか?
>ある配列をランダムに並び替えて
ここで書かれている「ある配列(例えばx[])」を別の配列(例えばy[])にコピーすることはできますか?
もしもそれができるのであれば、その逆の操作、つまり
y[]の全要素をそっくりそのままx[]にコピーすればよいのです。
お返事をありがとうございます。
私の説明不足だったようで、コピーすることは可能なのですが、私がやりたい操作はESE SEさんのおっしゃる通り、
初期の配列→ランダムに順序変更→処理→初期の配列に順序変更
ということです。
何か解りやすく、簡単なやり方がないかと考えているのですが…
No.2
- 回答日時:
最近C系で組まずVBばかりなのでコーディングは無理ですが考え方だけ。
初期の配列→ランダムに順序変更→処理→初期の配列に順序変更
ということですね。
初期の配列であればhoge[i]にi番目のデータが格納されていますが、
順序変更してしまうと初期のi番目の順序が失われるのでこれを格納しておく必要があります。
なのでこんな形はどうでしょうか。
初期の配列hoge[i]とは別に配列 hogehoge[3,]を用意
→hogehoge[0,i]=i //このデータ行が初期配列でi番目であることを格納
hogehoge[1,i]=random() //乱数を発生。後でこの列でソートする
hogehoge[2,i]=hoge[i] //初期配列のデータを格納
→hogehoge[]をhogehoge[1,i]の要素でソート
→hogehoge[2,i]に処理
→hogehoge[]をhogehoge[0,i]の要素でソート
これで可能かと思いますが・・・
ソートは関数を自作するなりライブラリを使用するなり。
こんなところでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel 郵便番号順に並び変えたい 同じ番号が複数あるとき 4 2022/04/28 18:35
- Excel(エクセル) Excel>マクロ>特定のセルで同じ情報が登録されている行を1行にまとめたい(文字連結) 6 2023/01/05 16:30
- その他(Microsoft Office) 1の行を固定した上でVBAを用いて日付順に自動並べ替え 2 2022/06/06 15:09
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Excel(エクセル) 同じ品番のマスタで最新日付のものに〇印を入れたい 3 2023/03/31 17:45
- 数学 【 数A 順列 】 問題 A,B,C,D,E,F,Gの7人が1列に並ぶとき, A,Bの2人が間に2人 4 2022/06/19 12:48
- Excel(エクセル) Googleスプレッドシートの割合の関数と円グラフの並べ替えについて 1 2022/07/22 17:31
- 経済学 <助けてください> 1 2022/07/09 20:12
- Excel(エクセル) 範囲指定をした中で、住所の列をユーザー設定の並べ替えをしたい 3 2022/05/15 13:51
- Java Java、配列の問題を教えて欲しいです。 ・日、月、火、水、木、金、土 ・各曜日の英語 を2次元配列 2 2023/07/10 19:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB上でのレコードセットの扱い...
-
VBAでMODE関数をつくる
-
C#でbyte配列から画像を表示さ...
-
Dir関数で読み取り順を操作でき...
-
vba フィルター 複数条件 3つ以...
-
配列の格納方法
-
コンボボックスのインデックス...
-
複数の配列変数を1つの配列変数...
-
C言語によるプログラミング
-
スロットマシンの判定方法(VB...
-
エクセルでXY座標に並べられた...
-
レコードセットの中身を配列に...
-
配列をランダムに並び替えても...
-
CString型 全角半角を意識せず...
-
vbaで出来ますか?
-
【excelマクロ】重複をチェック...
-
アクセステーブル、リンクとロ...
-
★クリスタルレポートの元になる...
-
コミットとは何でしょうか?
-
ACCESS2000 INPUTBOX でテーブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
配列のペースト出力結果の書式...
-
定数配列の書き方
-
大量の変数を定義するにはどう...
-
構造体配列の特定のメンバーをF...
-
Redim とEraseの違いは?
-
複数のtextboxの処理を一括で行...
-
VB.NETの配列にExcelから読み込...
-
COBOLの基本的な事なので...
-
Excel2010のinputboxで複数デー...
-
VBAでMODE関数をつくる
-
レコードセットの中身を配列に...
-
ReDim PreserveよりもReDimが遅い
-
EXCELを使って、アクセスログを...
-
配列の中の最大値とそのインデ...
-
VB6のメモリ解放に関して
おすすめ情報