プログラミング初心者です。入力された数字に対し、昇順か降順に並び替えるプログラムを作っています。実行し、降順か昇順を選択する画面でそれぞれ指定した数字(前者なら0、後者なら1)を選び入力した後、最初に入力された数字が連続して表示されたままでした(例えば3、2、4であれば3,3,3とと表示されます)。他のやり方(max/minを使わない方法)では並び替えることに成功しましたが、max/minを用いた方法で作ることは可能なのでしょうか。もし分かりましたら教えてください。本は参考せずに独自で作り上げました。ソースコードは以下の通りです。
#include<stdio.h> #include<stdlib.h> #define swap(type, x, y) {type t=x; x=y; y=t;} void arrangeH(int a[], int n) { int max=a[0]; for(int i=0; i<n-1; i++){ for(int j=0; j<n; j++){ if(a[j]>max){ swap(int, a[j], max);} } max=a[i+1]; } } void arrangeL(int a[], int n) { int min=a[0]; for(int i=0; i<n-1; i++){ for(int j=0; j<n; j++){ if(a[j]<min){ swap(int, a[j], min);} } min=a[i+1]; } } int main() { int n; int *num; int i; printf("入力する数値の個数="); scanf("%d",&n ); num=calloc(n,sizeof(int)); printf("%d個の数値を入力してください\n", n); for(int i=0; i<n; i++){ scanf("%d",&num[i] ); } printf("降順(0)にしますか、昇順(1)にしますか。:"); int s; do{scanf("%d", &s); if(s==0){ arrangeH(num, n);} else if(s==1){ arrangeL(num, n);} }while(s!=0 && s!=1); for(int a=0; a<n; a++){ printf("%d\n", num[a]); } free(num); return 0; }
回答1件
あなたの回答
tips
プレビュー