- ベストアンサー
qsortを用いた構造体配列のソート
- C言語において、qsortを使って構造体配列をソートする方法について説明します。
- 構造体配列のメンバが配列の場合でも、qsortを適用することができます。
- 具体的な例として、メンバが配列の構造体配列を1次元配列としてソートする手順を解説します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
qsortは、ソート対象の個々の要素が連続していないと使えませんね。 1つのソートが256しかないのであれば、単純ソートを自分で書けば良いかと思います。 やや手抜きで書くと、 for(k=0; k<1024; k++){ for(i=0; i<255; i++){ for(j=i+1; j<256; j++){ if(test[i].b[k] > test[j].b[k]){ work=test[i].b[k]; test[i].b[k]=test[j].b[k]; test[j].b[k]=work; } } } }
その他の回答 (3)
- hashioogi
- ベストアンサー率25% (102/404)
#2です。質問内容をよく確かめないで頓珍漢な回答をしてしまいました。お詫び申し上げます。 もっとも簡単なソートはバブルソートだと思いますが、バブルソートをほんの少し改良するだけでコムソート(comb sort)というものになります。それを調べられたらいかがでしょうか。
- trapezium
- ベストアンサー率62% (276/442)
うーん。No.1 さんのおっしゃる樣に qsort() は普通には使えませんね。 ただ qsort() の仕様がこのケースに向かないだけで、quick sort を自分で実装すればいけるはずです。まあ 256 程度だとそこまで手間をかけても、目に見えるほどの違いは出ないだろうとは思う。
- hashioogi
- ベストアンサー率25% (102/404)
#include <stdlib.h> #define KOSUU 256 typedef struct{ int a; int b[1024]; int c[1024]; }TEST; TEST base[KOSUU]; int compare (const void *a, const void *b) { TEST *ap, *bp ; ap = (TEST*) a ; bp = (TEST*) b ; return ap->a - bp->a ; } void sort_main (void) { qsort (base, KOSUU, sizeof (TEST), compare) ; }