c - C歧义中的选择排序

标签 c sorting swap

下面的代码工作正常,但第二个代码没有,我不确定哪里出了问题。

#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/

相关文章:

c - 显示 %d 或 %u 时 snprintf 崩溃

c - 使用 CMake 构建错误

c - c中使用指针的交换排序算法

Python 列表元素交换未按预期工作

python:[[1,2],[3,4],[5,6],[7,8]] 转化为 [[1],[2,3],[4,5],[6,7 ],[8]] 反之亦然

c - 在c中执行字符串的内容

c - malloc 指针上的偶发段错误

mysql - 将数据从一个表排序到另一个表

python - 删除文本文件中的非重复行

c - 为什么c中的数组不交换最后一个元素