0

テキストファイルから4000の名前のリストを読み取り、(すべてを読み取ってから並べ替えるのではなく)読み込まれるときにCスタイルの配列に並べ替える必要がある割り当てがあります。これには多くの要素がインデックスを変更することが含まれるため、ビットシフトを使用して大量の要素を同時に再配置することは可能でしょうか?たとえば、

  1. 20サイズのヒープベースの配列を宣言します
  2. 変数xインデックス10を配置します
  3. xがインデックス11になるように、配列データ型のサイズでインデックス9に対してビットシフトを実行します。

また、一般的なタスクに関するヒントがあれば、よろしくお願いします。

4

2 に答える 2

1

いいえ、それはビットシフトを使用するもののようにはまったく聞こえません。

配列には個別の要素(名前)が格納され、要素全体の順序を変更する必要があります。これは、ビットシフトが使用される目的ではありません。単一の整数のビットを左または右に移動するために使用されます。

あなたはただ学ぶべきですqsort()

「読み込まれているとおりに並べ替える」要件についてはよくわかりませんが、最も簡単な解決策はqsort()、それぞれの名前が追加されたときに呼び出すことです。それが許可されていないか、高すぎると思われる場合は、配列に対して「ソートされた挿入」を行う方法を検討してください。

ちなみに、Cでの一般的なアプローチは、実際の文字列の配列ではなく、文字列へのポインタの配列を操作することです。ポインタの配列の並べ替えがはるかに簡単なので、これは良いことです。

だからあなたは持っているでしょう:

char *names[4000];

それ以外の

char names[4000][64 /* or whatever */];

ただし、ロード時に各名前に動的にスペースを割り当てる必要がありますが、それほど難しくはありません。特にあなたが持っている場合はそうではありませんstrdup()。:)

于 2013-03-26T14:15:38.320 に答える
0

qsort()の使用が許可されていない場合(挿入のたびに使用するのはかなりばかげているでしょう)、独自の挿入ソートを作成できます。これは、大きな配列をソートするための非常に効率的な方法ではありませんが、先生が期待している方法だと思います。

于 2013-03-26T14:22:24.163 に答える