• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:qsortを用いた構造体配列のソート)

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

このQ&Aのポイント
  • C言語において、qsortを使って構造体配列をソートする方法について説明します。
  • 構造体配列のメンバが配列の場合でも、qsortを適用することができます。
  • 具体的な例として、メンバが配列の構造体配列を1次元配列としてソートする手順を解説します。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

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)
回答No.4

#2です。質問内容をよく確かめないで頓珍漢な回答をしてしまいました。お詫び申し上げます。 もっとも簡単なソートはバブルソートだと思いますが、バブルソートをほんの少し改良するだけでコムソート(comb sort)というものになります。それを調べられたらいかがでしょうか。

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.3

うーん。No.1 さんのおっしゃる樣に qsort() は普通には使えませんね。 ただ qsort() の仕様がこのケースに向かないだけで、quick sort を自分で実装すればいけるはずです。まあ 256 程度だとそこまで手間をかけても、目に見えるほどの違いは出ないだろうとは思う。

  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.2

#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) ; }

関連するQ&A