这段代码存在以下问题:

  1. 在输入一组数时,应使用循环来逐个输入数组元素,而不是使用scanf("%d ", arr)来输入整个数组。

  2. 在选择排序的内层循环中,应该从当前位置的下一个位置开始比较,而不是从数组的第一个位置开始比较。

  3. 在选择排序的内层循环中,交换元素的位置应该在内层循环结束后,而不是在if语句中进行交换。

  4. 在计算数组长度时,应该使用传入的参数len而不是通过sizeof(arr) / sizeof(arr[0])来计算。

修复后的代码如下:

#include<stdio.h>

void swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

void select(int arr[], int len)
{
    for (int i = 0; i < len; ++i)
    {
        int min = i;
        for (int j = i + 1; j < len; ++j)
        {
            if (arr[j] < arr[min])
            {
                min = j;
            }
        }
        swap(&arr[min], &arr[i]);
    }
}

int main(int argc, char const *argv[])
{
    int n;
    printf("请输入数组大小:\n");
    scanf("%d", &n);

    int arr[n];
    printf("请输入一组数:");
    for (int i = 0; i < n; ++i)
    {
        scanf("%d", &arr[i]);
    }

    int len = n;

    select(arr, len);

    for (int m = 0; m < len; ++m)
    {
        printf("%d ", arr[m]);
    }
    printf("\n");

    return 0;
}

修复后的代码可以正确地进行选择排序并打印排序后的结果

#includestdiohvoid swapint a int b	int temp = a;	a = b;	b = temp;void selectint arr int len	for int i = 0; i len; ++i			int min = i;		for int j= 0; j len; ++j 					if arrj arrmin							min = j;

原文地址: https://www.cveoy.top/t/topic/infc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录