arrays - 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 次数的最小整数,而不是其余的。
解决方案
如果你不介意弄乱你的初始数组,你可以这样做:
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;
请记住,这是非常低效的
推荐阅读
- mysql - 在同一行选择今年和上一年的mysql
- c++ - 使用 Qt 在 Eclipse 中未定义对 MainFrame 的 vTable 的引用
- node.js - Heroku - Mongoose、Node.Js 项目的部署引发 H10 错误
- c++ - 将 C++ Dll 加载到 vb.net 应用程序中
- error-handling - HTTP 错误 403:禁止访问:访问被拒绝
- mysql - 如何在 sequelize 中执行事务和回滚?
- node.js - 为什么函数从 AtlasDB 返回 false 而对于我的本地版本返回 true
- c# - 如何简单地创建一个 Linq 表达式集合作为参数?
- javascript - Javascript数组以逗号而不是名称开头?
- r - 如何在 R Shiny 小部件包的状态栏中添加金钱前缀?