BohYoh.comトップページへ

C言語によるアルゴリズムとデータ構造

戻る  

演習8-8の解答

 以下に示すような文字列の配列(ポインタの配列)をソートする関数を作成せよ。関数の中ではqsort 関数を用いること。
  char *p1 [] = {"LISP", "C", "Ada", "Pascal"};
  char *p2 [] = {"500", "S", "GST"};
 関数の形式は自分で考えること。なお、昇順にソートする関数と降順にソートする関数の二つを作成すること。

/* 演習8-8 文字列の配列(ポインタの配列)を昇順にソート */ #include <stdlib.h> #include <string.h> /*--- xおよびyが指す文字列の比較関数(x < y) ---*/ static int ptrcmp(const void *x, const void *y) { return (strcmp(*(const char **)x, *(const char **)y)); } /*--- 文字列を指すポインタの配列pを昇順にソート ---*/ void strpsort(char *p[], int n) { qsort(p, n, sizeof(char *), ptrcmp); } #include <stdio.h> int main(void) { int i; char *p1[] = {"LISP", "C", "Ada", "Pascal"}; char *p2[] = {"500", "S", "GST"}; /*--- 2次元配列p1をソート ---*/ puts("□ ソート前"); for (i = 0; i < sizeof(p1) / sizeof(p1[0]); i++) printf("p1[%d] = %s\n", i, p1[i]); strpsort(p1, sizeof(p1) / sizeof(p1[0])); puts("\n□ ソート後"); for (i = 0; i < sizeof(p1) / sizeof(p1[0]); i++) printf("p1[%d] = %s\n", i, p1[i]); putchar('\n'); putchar('\n'); /*--- 2次元配列s2をソート ---*/ puts("□ ソート前"); for (i = 0; i < sizeof(p2) / sizeof(p2[0]); i++) printf("p2[%d] = %s\n", i, p2[i]); strpsort(p2, sizeof(p2) / sizeof(p2[0])); puts("\n□ ソート後"); for (i = 0; i < sizeof(p2) / sizeof(p2[0]); i++) printf("p2[%d] = %s\n", i, p2[i]); return (0); }


戻る