【问题标题】:In C language why my selection-sort code doesn't work在 C 语言中,为什么我的选择排序代码不起作用
【发布时间】:2020-10-21 02:13:39
【问题描述】:

我写了一个选择排序算法,但是没有用。我找不到我的错。任何人都可以帮助我吗?

#include

int main () {
    
    int array[100],i,j,position,size,swap;
    
    printf("Enter number of integers\n");
    scanf("%d",&size);
    printf("Enter %d integers\n",size);
    for(i=0;i<size;i++){
        scanf("%d",&array[i]);
    }
    
    for(i=0;i<size;i++){
        position=i;
            for(j=i;j<size;j++){
                if(array[position]>array[j]){
                    position=j;
                    
                }
                if(position!=i){
                    swap=array[i];
                    array[i]=array[position];
                    array[position]=swap;
                }
            }   
    }
    printf("Sorted list in ascending order\n");
    for(i=0;i<size;i++){
        printf("%d\n",array[i]);
    }
    
    return 0;
}

【问题讨论】:

  • “不起作用”不是技术诊断。您需要更深入地挖掘并解释它不希望做什么,和/或它应该做什么。 您是否在调试器中单步执行过
  • 将交换部分移到内循环之后。
  • 抱歉我正在编辑
  • 已使用后输入。看到的输出。预期输出。

标签: c sorting select selection-sort


【解决方案1】:

选择排序算法通过从未排序的部分重复寻找最小元素(考虑升序)并将其放在开头来对数组进行排序。

所以交换需要在你找到正确的位置之后发生,即在你的 for 循环结束之后发生。所以如果你在 j 循环结束后切换 if 块,代码应该可以工作。

for(i=0;i<size;i++){
position=i;
    for(j=i;j<size;j++){
        if(array[position]>array[j]){
            position=j;
        }
    }  
    if(position!=i){
            swap=array[i];
            array[i]=array[position];
            array[position]=swap;
        }
}

【讨论】:

  • 哇,我明白了,非常感谢。我想了2个小时。非常感谢
猜你喜欢
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 2016-12-26
  • 1970-01-01
  • 2019-05-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
相关资源
最近更新 更多