#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;
这段代码存在以下问题:
-
在输入一组数时,应使用循环来逐个输入数组元素,而不是使用
scanf("%d ", arr)来输入整个数组。 -
在选择排序的内层循环中,应该从当前位置的下一个位置开始比较,而不是从数组的第一个位置开始比较。
-
在选择排序的内层循环中,交换元素的位置应该在内层循环结束后,而不是在if语句中进行交换。
-
在计算数组长度时,应该使用传入的参数
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;
}
修复后的代码可以正确地进行选择排序并打印排序后的结果
原文地址: https://www.cveoy.top/t/topic/infc 著作权归作者所有。请勿转载和采集!