下面的代码工作正常,但第二个代码没有,我不确定哪里出了问题。
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
void swap(int *xp, int *yp)
{
int temp = *xp;
*xp = *yp;
*yp = temp;
}
int main(void)
{
int a[100], i, j, n, temp, min_idx, min;
printf("\nEnter how many numbers\n");
scanf("%d", &n);
printf("\nEnter %d numbers to be sorted\n", n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]); //take input
for (i = 0; i < (n - 1); i++)
{
min_idx = i;
for (j = (i + 1); j < n; j++)
if (a[j] < a[min_idx])
min_idx = j;
swap(&a[min_idx], &a[i]);
}
printf("\nSorted array is:\n");
for (i = 0; i < n; i++)
printf("\na[%d] = %d", i, a[i]);
}
第二个代码(只修改了交换部分但不起作用):
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
int a[100], i, j, n, temp, min_idx, min;
printf("\nEnter how many numbers\n");
scanf("%d", &n);
printf("\nEnter %d numbers to be sorted\n", n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
for (i = 0; i < n; i++)
{
min = a[i];
for (j = (i + 1); j < n; j++)
{
if (a[j] < min)
{
min_idx = j;
min = a[j];
printf("\nmin_idx = %d and j = %d", min_idx, j);
}
}
temp = a[i]; //modified part
a[i] = a[min_idx];
a[min_idx] = a[i];
min_idx = 0;
}
printf("\nSorted array is:\n");
for (i = 0; i < n; i++)
printf("\na[%d] = %d", i, a[i]);
}
输出只是-
1
1
1
1
1
只修改了交换逻辑但不确定哪里出了问题,代码不起作用。为什么它仅在使用引用 (&) 时有效,而不是在第二个代码段中通常交换为 dont 时无效? TIA,请告诉我出了什么问题。
最佳答案
在这里,我希望您可以很容易地理解我在您的代码中所做的更改。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
int a[100], i, j, n, temp, min_idx, min;
printf("\nEnter how many numbers\n");
scanf("%d", &n);
printf("\nEnter %d numbers to be sorted\n", n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
for (i = 0; i < n; i++)
{
min = a[i];
min_idx = i;
for (j = (i + 1); j < n; j++)
{
if (a[j] < min)
{
min_idx = j;
min = a[j];
printf("\nmin_idx = %d and j = %d", min_idx, j);
}
}
if (min_idx != i) {
temp = a[i]; //modified part
a[i] = a[min_idx];
a[min_idx] = temp;
}
}
printf("\nSorted array is:\n");
for (i = 0; i < n; i++)
printf("\na[%d] = %d", i, a[i]);
}
关于c - C歧义中的选择排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53551149/