微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C语言中,为什么我的选择排序代码不起作用

如何解决在C语言中,为什么我的选择排序代码不起作用

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

#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;
}

解决方法

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

因此,交换需要在您找到正确的位置之后发生,即在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;
        }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。