• ベストアンサー

構造体のソートの記述について

akinori_sの回答

  • akinori_s
  • ベストアンサー率60% (21/35)
回答No.3

>試してみたのですが、エラーがおきてしまいました。 カットアンドペーストしたのなら空白を全角スペースで入れてるので 全角スペースをタブなり半角スペースに変えてみて下さい。

1976no12ri29
質問者

お礼

参考になりました。ありがとうございます。また何かありましたら、よろしくお願いします。ではでは

関連するQ&A

  • qsortを用いた構造体配列のソート

    お世話になります。 http://simd.jugem.jp/?eid=116 を参考にqsortを用いた構造体配列のソートをC言語で記述しようとしています。 上記のページは、構造体のメンバが配列でない場合です 今回は、メンバが配列のときの構造体配列のソートを実現したいと思っています。 つまり、 typedef struct{ int a; int b[1024]; int c[1024]; }TEST; という構造体配列があって、 TEST base[256]; と宣言し、メンバの配列の添え字を基準としてソートしたいときには、どのようにqsortを用いれば良いのでしょうか、ということです。 どうしたらよいかわからず途方にくれています。 つまり、下のようなソートが行われるには、どのようなプログラムを書けばいいかということです。 構造体でソートするものとします。 構造体でソートできれば、qsortを使っていなくても構いません。 プログラムの得意な方がおりましたら、ご教授下さい。 <ソート前> //************************************************ test[ 0].b[0] = 3; test[ 1].b[0] = 102; ... test[255].b[0] = 1; ------------ test[ 0].b[1] = 99; test[ 1].b[1] = 200; ... test[255].b[1] = 2; ------------ ... ------------ test[ 0].b[1023] = 99; test[ 1].b[1023] = 9; ... test[255].b[1023] = 200; //************************************************** <ソート後>:test[x]ではなく、b[y]を基準としてそれぞれのくくりをソートしたい //************************************************ test[ 0].b[0] = 1; test[ 1].b[0] = 3; ... test[255].b[0] = 102; ------------ test[ 0].b[1] = 2; test[ 1].b[1] = 99; ... test[255].b[1] = 200; ------------ ... ------------ test[ 0].b[1023] = 9; test[ 1].b[1023] = 99; ... test[255].b[1023] = 200; **************************************************

  • 構造体配列の安定なソート

    出席番号と得点の配列を持つ構造体配列で、 出席番号順に並んだ状態でqsortを使って得点をソートする場合、 同じ得点の人でも、出席番号順はばらばらになってしまいますよね。 調べてみて、バブルソートなど安定なソートを使えばいいということが分かったのですが、 qsortは標準ライブラリにあって、 比較関数も見よう見まねで作ってなんとかなったのですが、 他の方法となると具体的にどうすればいいのか、 よくわからない状況です。 http://homepage1.nifty.com/daccho/program/algo/sort3.htm こちらのサイトのソースファイルを見て、 普通のint配列のバブルソートは出来たのですが、 構造体配列を、構造体の中の一つの要素をキーにバブルソートできるようにするには、 ここからどのように変更すればいいのでしょうか? 並び替える内容はint型だけなので、文字列をソートできるようにする必要はなく、 ソート対象も少ないので(上限100程度)、速度的な問題は考慮しなくて大丈夫だと思います。 Cは勉強中で、基本文法がわかるぐらいという状況で、 もしかしたら変なことを言っているのかもしれませんが、 よろしくお願いします。

  • 自己参照型構造体とソート

    現在C言語の自己参照型について勉強をして入るのですが mallocで確保した領域でソートを行うにはどのようにすれば 良いのでしょうか。 (qsort関数は使わず、独自の関数で行う) *図 -database |number |name |next----batabase _____________|number _____________|name _____________|next------と続く ソースコード #include <stdio.h> struct database{ int number; char f_name; struct *next; }; int data_sort(){ /* ここのやり方がWebを見ても理解が出来ない状態です。 */ } int main(){ struct database *d1,*d2; d1 = (struct database *)malloc(sizeof(struct database*)) d2 = NULL; while(cnt < 10){ scanf("%d",&d1->number); scanf("%s",d1->name); d1->next = d2; d2 = d1; cnt++; } data_sort(); }

  • STLのlistのソートについて教えてください。

    STLで何か作ってみようと思っているのですが、複数のメンバを持つ構造体オブジェクトのリスト(要素の値が構造体オブジェクトであるリスト)を、その構造体オブジェクトのメンバの中の1つのをキーとして昇順、又は降順にソートしようとした場合、どのようにすればよいのでしょうか?? http://www5c.biglobe.ne.jp/~ecb/cpp/07_08.html ここを見ると、sort() という関数があるようですが、単に昇順でソートする、としか書いていなく、構造体のリストのソートはどうするのだろうと疑問です。 詳しい方いらっしゃいましたらご教授頂けると幸いです。

  • qsort/クイックソートについて

    構造体の配列をqsortで昇順に並び替えるプログラムを作成しています。 対象は数値項目で、単純にNo順に並び替えるイメージです。 クイックソートは、配列の内容によって処理時間が変わると聞いたので、一番遅くなる場合の時間を調べたいのですが、どのような並びだと一番遅くなるのでしょうか?

  • 構造体のソートに関して

    VB初心者です。 Private Save() As InIDtyp Private Type InIDtyp ID As String Name As String Unit As String End Type という宣言をしま構造体で値が入っているときにIDをキーとしてソートすることは可能でしょうか。 1回やってみたのですが、IDのみソートされてしまい、NameとUnitは一緒にソートされずにそのまま残ってしまいました。 デバッグをかけて中を見ましたらこんな感じでした。 例: 元の構造体 Save(0) ------ID:  56 ------Name: AA ------Unit: ms Save(1) ------ID:  35 ------Name: KY ------Unit: yy Save(2) -----ID:  33 ------Name: LI ------Unit: ba ソート後 Save(0) -----ID:  33 ------Name: AA ------Unit: ms Save(1) -----ID:  35 ------Name: KY ------Unit: yy Save(2) -----ID:  56 ------Name: LI ------Unit: ba どなたか構造体のソートのやり方をご存知の方がいましたらご教授お願いします。

  • 構造体のリストをソートしたい。

    ある名簿のリストを作りました。 以下のような構造体で、 typedef struct meibo{ char name[10]; int old; struct meibo *next; }MEIBO; これを、ポインタp->next->nameをたどっていって、名前が辞書順になるようにリストを作ったのですが、 これを年齢順にソートして表示させたいんです。 どんな方法があるんでしょうか? 一旦すべてを配列に格納して、クイックソート…とかも考えたのですが、すごく領域をとるし、なんか2度手間(最初から配列に順に格納していけばよかったなぁ・・・と。 それでもやっぱり最初から名列順にするときから配列に入れておくほうがいいのでしょうか? 教えてください。 (最初から年齢を比較してリストを作れば・・ってのはなしで、名列順のリストが存在するものとしてください。)

  • 自己参照構造体を使った2分探索用ファイル処理

    大学での明日の課題なのですが、昇順にソートされている単語ファイルを2分探索できるようにツリー型に自己参照構造体に格納する方法がわかりません。構造体の配列に一度入れてからならできるのですが意味がありません。またファイル処理でソートされている単語を50音順に読んでくるので、自己参照構造体に入れる順序が複雑になります。最初にある単語をキーにするとただの長い構造体になってしまいます。説明不足かも知れませんがよろしくお願いします。 <構造体の宣言> struct dictionary{ char *tango struct dictionary *small; struct dictionary *big; } 構造体の中身の順[]内はデータの読み込む順     [0]     /   [1]   / \ [3]   [2]  \    [4]   \   /    \[5]      \[6]

  • 構造体配列のクイックソート

    こんにちわ。 構造体配列のリストを ポインタのつなぎ変えによるクイックソートで 以下のようなソートをしたいのですが、悩んでおります。 struct info { int count; struct info *prev; struct info *next; }; int main () { struct info info[5]; /* 初期値設定 */ quick_sort(info, 0, 5); return 0; } 上記のようにして、クイックソートをしたいのですが、 よくあるクイックソートだと 例えば初期値を <配列のindex>要素の値を <0> <1> <2> <3> <4> 5 1 4 3 2 などと定義した場合 普通のクイックソートだと <0> <1> <2> <3> <4> 1 2 3 4 5 というように並び変えられてしまい <配列のindex>と 要素の値の組み合わせが変わってしまいますが、 この組み合わせを変えず、 struct info *if; if = info; for (i=0; i<MAX; i++){ printf("%d", if->count); if = if->next; } printf("\n"); とすることで、indexとしては昇順になっていないが *nextをたどっていくことでちゃんと目的の値の昇順になっている というのを実現したいのですが、ポインタのつなぎ変えか何かが 間違っているようで うまいことできていません。 どなたかご教授いただけますでしょうか。 申し訳ありませんが、よろしウお願いいたします。

  • ソートについて教えてください。

    構造体のソートを行いのですが方法が分かりません。教えていただけませんか? ただしqsort関数を使用しない方法でお願いします。 ---------------------------- typedef struct PERSONAL { char Name[30]; /*名前 int Birthday[9]; /*誕生日 char Bloodtype[4]; /*血液型 } ---------------------------- と構造体を設定し、 main関数で『PERSONAL profile』を宣言します。 このprofileの中に ------------------------------------------ profile[0] = {"太郎","19870821","B"} profile[1] = {"次郎","19801017","O"} profile[2] = {"三郎","20000819","AB"} profile[3] = {"四郎","19951030","B"} profile[4] = {"五郎","20000816","A"} ------------------------------------------ の五つのデータが格納されているとします。 このデータを誕生日を基準に昇順にソートをするのが、目的です。 最終的に ---------------------------------------------- profile[0] = {"次郎","19801017","O"} profile[1] = {"太郎","19870821","B"} profile[2] = {"四郎","19951030","B"} profile[3] = {"五郎","20000816","A"} profile[4] = {"三郎","20000819","AB"} ---------------------------------------------- という風にするのが目標です。 for文の多重ループを使用し、誕生日の若い順にprofileのデータを一つずつ、前もって宣言した別の構造体『PERSONAL Buffer』に順番に入れ、入れ終わったらそのデータをそのまま『PERSONAL profile』に入れる(戻す)。 という方法で昇順にソートを行いたいのですがどうするべきか分かりません。 アドバイスをいただけませんか? ------------------------------------------------- int main(void) { PERSONAL profile; PERSONAL Buffer; --この後どうすればいいのか教えてください。-- } --------------------------------------------------