C言語 ソートについて
#include <stdio.h>
#include <stdbool.h>
#define NUM_ARRAY 4
#define NUM_DATA 5
int count_swap = 0; // 交換回数 int count_comparison = 0; // 比較回数
void selection_sort(int a[], int n) {
}
int main(void) {
int data[NUM_ARRAY][NUM_DATA] =
{{9, 7, 5, 6, 8},
{9, 8, 7, 6, 5},
{5, 6, 7, 8, 9},
{5, 6, 8, 7, 9}};
for (int i = 0; i < NUM_ARRAY; i++) {
count_swap = 0;
count_comparison = 0;
int d[NUM_DATA];
copy_array(data[i], d, NUM_DATA); // 配列のコピー
printf("----------------\n");
print_array(d, NUM_DATA); // ソート前の配列の表示 selection_sort(d, NUM_DATA); // 挿入ソートの実行 print_array(d, NUM_DATA); // ソート後の配列の表示
printf("比較回数: %d\n", count_comparison); // 比較回数の表示
printf("交換回数: %d\n", count_swap); // 交換回数の表示
}
}
上の雛形を使って選択ソートを実行するという問題なのですが途中までそれっぽいのは出来たのですが上手くいかないので解答をお願いします。
下に自分が今書いているものを置いておきます。
#include <stdbool.h>
#include <stdio.h>
#define NUM_ARRAY 4
#define NUM_DATA 5
int count_swap = 0;
int count_comparison = 0;
void swap(int d[], int i, int j) {
count_swap += 1;
printf("swap a[%d] = %d, a[%d] = %d\n", i, d[i], j, d[j]);
int temp = d[i];
d[i] = d[j];
d[j] = temp;
}
void copy_array(int *a, int *b, int n) {
for (int i = 0; i < n; i++) {
b[i] = a[i];
}
}
void print_array(int d[], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", d[i]);
}
printf("\n");
}
bool compare(int d[], int i, int j) {
count_comparison += 1;
printf("compare a[%d] = %d, a[%d] = %d\n", i, d[i], j, d[j]);
if (d[i] > d[j]) {
return true;
} else {
return false;
}
}
void selection_sort(int d[], int n) {
int min;
for (int i = 0; i < n - 1; i++) {
min = i;
for (int j = i + 1; j < i; j++) {
if (compare(d, min, j)) {
min = j;
}
}
swap(d, i, min);
print_array(d, n);
}
}
int main(void) {
int data[NUM_ARRAY][NUM_DATA] = {
{9, 7, 5, 6, 8}, {9, 8, 7, 6, 5}, {5, 6, 7, 8, 9}, {5, 6, 8, 7, 9}};
for (int i = 0; i < NUM_ARRAY; i++) {
count_swap = 0;
count_comparison = 0;
int d[NUM_DATA];
copy_array(data[i], d, NUM_DATA); // 配列のコピー
printf("----------------\n");
print_array(d, NUM_DATA); // ソート前の配列の表⽰
selection_sort(d, NUM_DATA); // 挿⼊ソートの実⾏
print_array(d, NUM_DATA); // ソート後の配列の表⽰
printf("⽐較回数: %d\n", count_comparison); // ⽐較回数の表⽰
printf("交換回数: %d\n", count_swap); // 交換回数の表⽰
}
}
お礼
すみません。 確認したらできました。本当にありがとうございました。
補足
素早い回答誠にありがとうございます。 基本的には今の文でバブルソートを行ってる処理部分を修正したいと思っています。 二つ目の値までは小さい順になるのですが、それ以降の16進数を入力するとおかしくなってしまいます。 変数:jは消すのを忘れてましたので関係ありませんでした。 誠に申し訳ありません。