我正在尝试用 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 的答案后修复了 Temp 问题
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;
}