使用递归方法(即无循环)重写冒泡排序,以及在运行递归排序之前和之后打印出数组的打印数组函数。数组是:
int ary[] = { 19, 62, 45, 9, 4, 99, 82, 34, 59, 102 }
编写一个函数来读取命令行参数并处理两个开关:“-min”和“-max”。如果选择“-min”,则数组按从最小到最大的顺序排序。如果选择“-max”,则数组按从最大到最小的顺序排序。
使用名为 rsort.exe 的程序的发布版本从 Windows cmd 提示符生成输出。如果命令行上未提供参数,则打印出一条帮助消息,类似于以下内容:
用法:c:> rsort.exe WHERE -min [最小值到最大值],或 -max [最大值到最小值
来自评论的代码。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
int ary[] = { 19, 62, 45, 9, 4, 99, 82, 34, 59, 102 };
int find_max(int *array,int max,int i);
if (i>=0)
{
if (array[i]>array[max])
{
find_min(array,i,i-1);
}
find_min(array,max,i-1);
}
return max;
}
最佳答案
将发布我刚刚制作的快速且草率的递归冒泡排序。
find_max
进行升序排序。如果您想要降序排序,只需切换较低的值而不是较大的值即可。
每次调用 find_max 时,我都会打印 spos
只是为了给您提示工作的样子。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int find_max(int [], size_t, int, int);
int main(void)
{
int ary[] = { 19, 62, 45, 9, 4, 99, 82, 34, 59, 102};
find_max(ary, sizeof(ary)/sizeof(int), 0, 0);
for(int i=0; i<sizeof(ary)/sizeof(int); i++)
{
printf("%d \n", ary[i]);
}
return 0;
}
int find_max(int numbers[], size_t len, int spos, int recurs)
{
int temp_len = len - recurs;
if(numbers[spos]>numbers[spos+1])
{
numbers[spos]^=numbers[spos+1];
numbers[spos+1]^=numbers[spos];
numbers[spos]^=numbers[spos+1];
}
printf("%d position \n", spos);
if(recurs == (len-2))
{
return 0;
}
if(spos == (temp_len-2))
{
find_max(numbers, len, 0, recurs+1);
}
else
{
find_max(numbers, len, spos+1, recurs);
}
}
关于c - 使用不带循环的递归在 C 中编写程序以获得所需的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47381834/