首页 > 解决方案 > C中的选择排序算法不会打印整个排序数组

问题描述

#include <stdio.h>
#include <stdlib.h>
int smallest(int [],int);
int select_sort(int[],int);

int smallest(int arr[],int len){
        int small_index=0;
        int small=arr[0];
        for(int i=0;i<len;i++){
                if(arr[i]<small){small=arr[i];
                                 small_index=i;
                                                }
                            }
        return small_index;
}
int select_sort(int arra[],int len){
    int new_arra[100];
    for(int i=0;i<len;i++){
            int small=smallest(arra,len);
            new_arra[i]=arra[small];
            printf("%d",new_arra[i]);
    }

    return new_arra;

}
int main()
{
    int arr[100]={6,1,0,-2,18};
    select_sort(arr,5);
    return 0;
}

我为选择排序程序编写了这段代码,我知道理想情况下我应该在 select_sort 函数中使用数组的动态分配,但我在没有它的情况下尝试它。它应该按升序打印数组,我想我在某处搞砸了变量赋值,因为当我运行程序时,它只打印输入数组 len 次数的最小整数,而不是其余的。

标签: arraysalgorithmsortingselection-sort

解决方案


如果你不介意弄乱你的初始数组,你可以这样做:


     int select_sort(int arra[],int len)
        {
            int maxValue = Integer.Max_Value; 
            int new_arra[100];
            for(int i=0;i<len;i++){
                int small=smallest(arra,len);
                new_arra[i]=arra[small];
                arra[small]= maxValue;
                printf("%d",new_arra[i]);
        }
    
        return new_arra;

请记住,这是非常低效的


推荐阅读