【发布时间】:2018-08-09 02:32:28
【问题描述】:
我一直在研究递归版本的选择排序。 MaxInd 在 SelectionSort 的一次迭代中运行良好,但是一旦我使 SelectionSort 递归,MaxInd 在 SelectionSort 的第一次迭代后开始产生不正确的值,这导致我的代码交换了不正确的值。我不确定它为什么会这样。
#include <stdio.h>
int MaxInd(int arr[], int i, int len, int max, int index){
if (arr[i]>max){
max=arr[i];
index=i;
}
if(i==len)
return index;
index = MaxInd(arr,i+1,len,max,index);
return index;
}
void SelectionSort(int arr[], int len){
int index=0; int max=0; int i=0; int temp=0; int num=0;
if(len<0){
for(int j=0; j<6; j++)
printf("array=%d\n",arr[j]);
return;
}
num = MaxInd(arr, i, len, max, index);
if(len>0){
temp=arr[len-1];
arr[len-1]=arr[num];
arr[num]=temp;
for(int j=0; j<6; j++)
printf("%d ",arr[j]);
printf("\n");
}
return SelectionSort(arr,len-1);
}
int main(void){
int arr[6] = {1,4,3,7,9,2};
int len=sizeof(arr)/sizeof(arr[0]);
SelectionSort(arr, len);
}
【问题讨论】:
-
忘记从
SelectionSort返回 - 现在使用它的值的未定义行为。 -
你到底是什么意思?我在内部调用它后尝试添加一个返回,但它没有改变任何东西。
-
SelectionSort()中return 0;的缩进不正确。在SelectionSort()末尾没有返回的事实是有问题的。尚不清楚返回值应该是什么;排序后的数组中的值数应与输入数组中的值相同,除非您要挤出重复项。
标签: c recursion selection-sort