为什么这个功能在这里不起作用?它不对输出进行排序。 假设如果我输入 1 4 2,输出始终是 1 4 2 而不是 1 2 4。
如何正确实现这种选择排序?
提前致谢!!
#include <stdio.h>
int selection_sort (int a[],int n, int i, int j,int temp,int min){
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++){
min=i;
for(j=i+1;j<n;j++){
if(a[j]<a[min]){
min=j;
}
}
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
int main(){
int i, j, n,a[20], temp,min;
printf("How many elements:\n ");
scanf("%d",&n);
printf("Enter array elements:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("Sorted array: ");
for(i=0;i<n;i++)
printf(" %d",a[i]);
return 0;
selection_sort(i,j,n,a,temp,min);
}
最佳答案
您的代码中有 3 个主要问题:
您收到两次用户输入。
main
函数中的一个:printf("Enter array elements:\n"); for(i=0;i<n;i++) scanf("%d",&a[i]);
selection_sort
函数中的另一个:for(i=0;i<n;i++) scanf("%d",&a[i]);
通过删除
selection_sort
函数中的函数来修复此问题。正如评论部分所述,您在调用
selection_sort
函数之前从main
函数返回:return 0;
通过将其移动到
main
函数的末尾来修复此问题。在调用
selection_sort
函数之前,您将打印它的预期结果:printf("Sorted array: "); for(i=0;i<n;i++) printf(" %d",a[i]); ... selection_sort(i,j,n,a,temp,min);
通过在打印结果之前调用
selection_sort
来修复此问题。
这是固定代码:
#include <stdio.h>
int selection_sort (int a[], int n, int i, int j, int temp, int min)
{
for(i=0;i<n;i++) {
min=i;
for(j=i+1;j<n;j++) {
if(a[j]<a[min]) {
min=j;
}
}
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
int main()
{
int i, j, n,a[20], temp, min;
printf("How many elements: ");
scanf("%d",&n);
printf("Enter array elements: ");
for(i=0;i<n;i++) {
scanf("%d",&a[i]);
}
selection_sort(a, n, i, j, temp, min);
printf("Sorted array:");
for(i=0;i<n;i++) {
printf(" %d", a[i]);
}
printf("\n");
return 0;
}
这是一个测试:
$ gcc main.c && ./a.out
How many elements: 3
Enter array elements: 1 4 2
Sorted array: 1 2 4
关于c - 函数不适用于 C 程序选择排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69081701/