今回はアドレスの方を入れ替えて昇順(降順)に入れ替えるプログラムを作っています。
しかし、アドレスが上手く渡されないのか、このコードを使用するとエラーが発生してしまいます。
調べてみたところ、selection_sort関数にアドレスしか渡せておらず、配列の数字が読み込めてないのが原因だったようです。
どのように変えれば配列も読み込んでくれるのでしょうか?
OS:Windows 10
環境:Visual Studio C++2017
始めて掲示板を使用するので不備などが多いかもしれませんがよろしくお願いします。
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LIST 1
#define MIN_LIST 2
int nyuryoku(const int minimum, const int maximum); //入力する関数
void selection_sort(int *list[], int num, int choose); //選択ソート
void swap(int *x, int *y); //入れ替え関数
int main(void) {
int num; //個数
int *list; //リスト
int i, j;
int max, min; //最高値・最低値
int max_or_min;
Student *student;
printf("選択ソートのプログラム\n");
printf("リストに入れる個数を入力してください\n");
printf("3~20まで有効です\n");
num = nyuryoku(3, 20);
//容量を確保
list = (int*)malloc(sizeof(int) * num);
if (list == NULL || student == NULL) {
printf("エラーが発生したので至急終了します\n");
_getch();
return 0;
}
printf("ソートする数字を入力してください\n");
printf("1~100まで有効です\n");
for (i = 0; i < num; i++) {
printf("%d個目の数字:", i + 1);
list[i] = nyuryoku(1, 100);
}
printf("どちらにソートするか選択してください");
printf("1:低い順 2:高い順");
max_or_min = nyuryoku(MAX_LIST, MIN_LIST); //1か2で選択してもらう
//ここの時にアドレス渡しにミスがあり、selection_sort関数でエラーが発生する
printf("\nソート中です\n");
selection_sort(&list, num, max_or_min); //選択ソート
printf("ソート完了\n");
for (i = 0; i < num; i++) {
printf("%d\n", list[i]);
}
_getch();
return 0;
}
int nyuryoku(const int minimum, const int maximum) {
int suuti;
char buf[100];
do {
fgets(buf, sizeof(buf), stdin);
sscanf_s(buf, "%d", &suuti);
if (!(minimum <= suuti && suuti <= maximum)) {
printf("規定内の数値ではありません 入力し直しをお願いします");
}
} while (!(minimum <= suuti && suuti <= maximum));
return suuti;
}
void selection_sort(int *list[], int num, int choose) {
int i, j;
int min, max;
for (i = 0; i < num - 1; i++) {
min = *list[i];
max = *list[i];
for (j = i + 1; j < num; j++) {
if (min > *list[j] && choose == MAX_LIST) //ここでlist[1]等を行うと終了する
min = *list[j];
else if (max < *list[j] && choose == MIN_LIST)
max = *list[j];
}
if (min != *list[i] && choose == MAX_LIST) {
swap(&(*list[i]), &(*list[j - 1]));
}
else if (max != *list[i] && choose == MIN_LIST) {
swap(&(*list[i]), &(*list[j - 1]));
}
}
}
void swap(int *x, int *y) {
int swap;
swap = *x;
*x = *y;
*y = swap;
}