Selection Sortを実装するために C で簡単なプログラムを作成しようとしています。
以下は私のプログラムです:
#include<stdio.h>
#include<conio.h>
int main(void)
{
int min, total, *arr,i,j,temp;
clrscr();
printf("Enter the size of array : ");
scanf("%d",&total);
arr = (int *) malloc(total * sizeof(int));
for(i = 0; i<total; i++)
{
printf("\nEnter element %d: ", i+1);
scanf("%d", &arr[i]);
}
min = arr[0];
for(i = 0; i<total; i++)
{
for(j = i; j<total; j++)
{
if(arr[j]<min)
{ min=arr[j]; }
}
min = temp;
min = arr[i];
arr[i] = min;
}
for(i = 0; i<total; i++)
{
printf("%d \t", arr[i]);
}
getch();
return 0;
}
出力:
答えは
10 20 30 40 70 80
プログラムを修正するにはどうすればよいですか?
編集1:
cnicutar の回答を読んだ後の温度の問題を修正
min = arr[0];
for(i = 0; i<total; i++)
{
for(j = i; j<total; j++)
{
if(arr[j]<min)
{
min=arr[j];
min_index = j;
}
}
temp = a[i];
a[i] = min;
a[min_index] = temp;
}
今、私は上記の入力値に対してこれを取得します: 10 10 10 20 10 10
編集2:
問題が見つかりました。プログラムはすべての反復に対して同じ最小値を使用していました
#include<stdio.h>
#include<conio.h>
int main(void)
{
int min, min_index, total, *arr,i,j,temp;
clrscr();
printf("Enter the size of array : ");
scanf("%d",&total);
arr = (int *) malloc(total * sizeof(int));
for(i = 0; i<total; i++)
{
printf("\nEnter element %d: ", i+1);
scanf("%d", &arr[i]);
}
min = arr[0]; // min = arr[0] = 70 || min = 10 <-- Problem
for(i = 0; i<total-1; i++) // i = 0 ||
{ // ||
for(j = i; j<total; j++) // j = i = 0 ||
{ // ||
if(arr[j]<min) // 30<70 ; 40<30 ; 10<30 ||
{ // ||
min=arr[j]; // min = 30 ; ; min = 10 ||
min_index = j; // index = 1 ; ; index = 3 ||
} // ||
} // ||
// ||
if(min!=arr[i]) // ||
{ // ||
temp = arr[i]; // ||
arr[i] = min; // ||
arr[min_index] = temp; // After swap: 10 30 40 70 80 20 ||
}
min = arr[i+1]; // (Add this to fix the problem)
}
for(i = 0; i<total; i++)
{
printf("%d \t", arr[i]);
}
getch();
return 0;
}