【发布时间】:2021-09-01 23:12:30
【问题描述】:
#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 次,而不是其余的他们。
【问题讨论】:
-
这是因为您的函数
smallest将始终返回数组中相同的最小元素。您必须以某种方式标记或删除您已处理的元素,以便在以后的所有操作中忽略它们。 -
通常,选择排序在原地工作,即您将剩余未排序数组的最小元素切换到当前位置。然后你推进一个索引并跳过搜索中已经排序的元素
标签: arrays algorithm sorting selection-sort