• 締切済み

UNIXのCでのことなのですが

#include <stdio.h> #define gyou 5 #define retsu 5 main(){ int sort[gyou][retsu]; int tate[retsu]; int yoko[gyou]; int i,j; FILE* fp; for(j=0;j<tate;j++) tate[j]=0; fp=open("sort.txt","r"); for(i=0;i<gyou;i++) { for(j=0;j<retsu;j++) fscanf(fp,"%d",&seiseki[i][j]); } fclose(fp); return 0; } この文にどのようなプログラムを書き足せば、sort.txtの中に書かれている数字20個(4行×5列)を昇順に並び替えさせることができるのでしょうか?したい形は 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 です。 ヒントだけでもいいのでご教授お願いいたします。

みんなの回答

回答No.2

#include <stdio.h> #include <stdlib.h> int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; } void print(int a[][5]) { int i, j; for(i = 0; i < 4; i ++){ for(j = 0; j < 5; j ++) printf("%2d ", a[i][j]); putchar('\n'); } } int main(void) { int a[4][5] = {{4, 3, 2, 1, 0}, {10, 11, 12, 13, 14}, {9, 8, 7, 6, 5}, {15, 16, 17, 18, 19}}; int *p = (int *)a; print(a); qsort(p, 4 * 5, sizeof(int), cmp); print(a); return 0; }

sakazou728
質問者

お礼

わざわざ新しくプログラムを書いていただいてどうもありがとうございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

な~んにも考えずに ・一度 1次元配列に入れる ・その配列上でソート ・元の 2次元配列に戻す という処理でいいんじゃないの?

関連するQ&A