好的,这是一个函数,它以这样一种方式排列数组中的元素,即所有小于给定值的元素都放置在大于给定值的元素左侧的位置。
例如,如果数组内容是 {4,6,2,9,1,7,3,10} 并且 x 被指定为 5,那么 {4,3,2,1,9,7,6,10} 是一个可能的解决方案,因为所有小于 5 的元素都在大于 5 的元素的左侧。
此外,除了在 main 函数中定义数组外,禁止使用括号 []。
另外,实现一个打印数组内容的函数。这两个函数都必须递归实现。您只能访问数组的每个元素一次。
好的,所以这个“挑战”,我不知道在给定的限制下是否可能。我试图用一个while循环来制作它,然后以某种方式将它转换为递归,但你也不允许更改参数。有谁知道解决办法。
我写了一些东西,但它是垃圾。
#include <stdio.h>
#define length 8
void selection(int array[],int size, int x){
int i=0;
int temp;
if(( array[i]>x ) && (array[i] > array[i+1])){
temp=array[i+1];
array[i+1]=array[i];
array[i]=temp;
i++;
selection(array+1,size-1,x)
}
else if(( array[i] > x) && ( array[i+1] > array[i])){
i++;
}
//This is not correct
}
void printArray(int arr[], int start, int len)
{
if(start >= len)
return;
printf("%d ", arr[start]);
printArray(arr, start + 1, len);
}
int main(){
int array[length]={6,4,2,9,1,7,3,10};
int x=5;
selection(array,length,x);
printArray(array,0,length);
return 0;
}
我没有实现递归解决方案,因为我尝试过的事情不断给出分段错误,因为我到达了数组之外。
任何人都可以在没有 for 或 while 的情况下递归地执行此操作。我想你需要拆分数组并看一半一半