私は、このプログラムが列インデックスで文字列の2次元配列をソートしようとしています。文字列配列のソートC
私はこのようなこの2次元配列初期化:
char *str[ROWS][COLS] = {{"Russia", "Boxing", "Mens", "Gold"},
{"America", "Cycling", "Mens", "Gold"},
{"New Zealand", "Swimming", "Womens", "Silver"},
{"India", "Badminton", "Mens", "Bronze"}};
をそして私は、最初の列で国の名前を、この配列をソートしたい場合、それはこのようなものになります。
char *str[ROWS][COLS] = {{"America", "Cycling", "Mens", "Gold"},
{"India", "Badminton", "Mens", "Bronze"}};
{"New Zealand", "Swimming", "Womens", "Silver"},
{"Russia", "Boxing", "Mens", "Gold"}};
を
これは私がこれまで行ってきたことであり、ソート方法を除いてほぼ正しいです。私はそれを実装するのに苦労しています。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ROWS 4
#define COLS 4
void print_array(char *str[][COLS]);
void sort_array(char *str[][COLS], int nrows, int col);
int
main(void) {
char *str[ROWS][COLS] = {{"Russia", "Boxing", "Mens", "Gold"},
{"America", "Cycling", "Mens", "Gold"},
{"New Zealand", "Swimming", "Womens", "Silver"},
{"India", "Badminton", "Mens", "Bronze"}};
int col;
/* array before sorting */
printf("Before: \n");
print_array(str);
/*choosing column index to sort by*/
printf("\nChoose which column index you wish to sort by: ");
if (scanf("%d", &col) != 1) {
printf("Invalid input\n");
exit(EXIT_FAILURE);
}
sort_array(str, ROWS, col);
/* array after sorting */
printf("\nAfter: \n");
print_array(str);
return 0;
}
void
print_array(char *str[][COLS]) {
int i, j;
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
printf("%s ", str[i][j]);
}
printf("\n");
}
}
/*function used for sorting the array */
void
sort_array(char *str[][COLS], int nrows, int col) {
int i, j;
char *temp;
for (i = 0; i < nrows; i++) {
for (j = i; j < nrows; j++) {
if(strcmp(str[i][col], str[j][col]) > 0) {
temp = str[i][col];
str[i][col] = str[j][col];
str[j][col] = temp;
}
}
}
}
私の問題は、ソートアルゴリズムが行を入れ替えるのではなく、その列の単なる文字列であることです。私もinsertion sort
アルゴリズムを使用しようとしていましたが、文字列の2次元配列で実装する方法がわかりませんでした。
助けを借りれば幸いです。
「の行を交換するが、その列の文字列だけではない」 - そう?ループを書く。 –
ええ、 '挿入ソート'はこれに適していますか? – RoadRunner
'qsort'(標準ライブラリ)を使ってください – BLUEPIXY