C言語の問題です!!
すみません。
詳細表示をする際に、未ソート部の先頭要素の上に記号文字「*」を表示し、未ソート部の最小要素の上に記号文字「+」を表示したいと思い、以下のソースプログラムを作成したのですが、結果が何か違う気がします…。どこが違うのか、教えていただけませんか? また、プログラムを修正していただけませんか?
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define swap(type,x,y) do{type t=x;x=y;y=t;}while(0)
/*--- 単純選択ソート ---*/
void selection(int a[], int n)
{
int i, j,k,flg;
char *disp[]={" ","[* ]","[ +]","[*+]"};
for (i = 0; i < n - 1; i++) {
int min = i;
for (j = i + 1; j < n; j++) {
if (a[min] > a[j]) {
min = j;
}
}
for (k = 0; k < n; k++)
{
flg=0;
if(k==i) flg|=1;
if(k==min) flg|=2;
printf("%s",disp[flg]);
}
printf("\n");
for (k = 0; k < n; k++)
printf("[%2d]", a[k]);
printf("\n");
swap(int, a[i], a[min]);
}
}
int main(void)
{
int i, nx;
int *x;
printf("要素数 : ");
scanf("%d", &nx);
x = calloc(nx, sizeof(int));
srand(time(NULL));
for (i = 0; i < nx; i++) {
x[i] = rand() % 100;
printf("x[%d] = %d\n", i, x[i]);
}
selection(x, nx);
for (i = 0; i < nx; i++)
printf("x[%d] = %d\n", i, x[i]);
free(x);
return 0;
}
お礼
そうですね、 各行で、値の表示させればわかりましたね。 ありがとうございます。 為になる解決方法を教えていただいて。