C歧义中的选择排序



下面的代码运行良好,但第二个代码不正常,我不确定出了什么问题。

#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 numbersn");
scanf("%d", &n);
printf("nEnter %d numbers to be sortedn", 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 numbersn");
scanf("%d", &n);
printf("nEnter %d numbers to be sortedn", 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

只是修改了交换逻辑,但不确定出了什么问题,代码不起作用。为什么只有当引用(&(被使用,而在第二个代码段中通常被替换为not时,它才起作用?请告诉我出了什么问题,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 numbersn");
scanf("%d", &n);
printf("nEnter %d numbers to be sortedn", 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]);
}

最新更新