我编写了一个递归排序数组的程序。 但是,我在第11行遇到以下错误:']'令牌之前的语法错误。
以下是代码:
//This program recursively sorts an array
#include<stdio.h>
void rec_sort(int values[], int n);
main()
{
int vals[4];
vals[0] = 37; vals[1] = 48; vals[2] = 56; vals[3] = 63;
printf("this array sorted: %x\n", rec_sort(vals[], 4));
system("Pause");
return 0;
}
void rec_sort(int values[], int n) {
//Base case
if (n<2) return;
int maxIndex=0;
int i;
//Find max item in array in indexes 0 through n-1
for(i=1; i<n;i++) {
if(values[i] > values[maxIndex])
maxIndex=i;
}
//Swap this element with one stored in n-1
//Set temp to n-1, set n-1 in array to max, set max to temp
int temp = values[n-1]; //Store temp as last element in array
values[n-1] = values[maxIndex]; //Store last element as max value in array
values[maxIndex] = temp; //temp will keep on changing, as array is sorted
//Recursively sort the array values of length n-1
sort(values, n-1);
}
答案 0 :(得分:3)
只需删除第11行的[]
即可。但这对您的问题是一个天真的答案,并且不会让您走得太远。还有其他问题 - 最明显的是printf(..., rec_sort(...)...);
考虑到rec_sort
有void
返回类型,您希望printf()
如何理解该做什么?我不确定你想要什么,但这至少应该是你的开始。
答案 1 :(得分:3)
看起来你正在尝试打印整个数组,C在printf
的一次调用中不会这样做。相反,您需要一个循环来迭代数组并分别打印出每个数字:
for (i=0; i<4; i++)
printf("%x\n", vals[i]);
由于rec_sort
没有返回数组,你还需要从调用printf中单独调用它,所以你会得到类似的东西:
// sort the data:
rec_sort(vals, 4);
// print the sorted values:
for (i=0; i<4; i++)
printf("%x\n", vals[i]);
答案 2 :(得分:1)
printf("this array sorted: %x\n", rec_sort(vals[], 4));
但rec_sort()
为void
。不return
任何事情
void rec_sort(int values[], int n)
另外,将您的主要声明为int main()
答案 3 :(得分:0)
问题在于:
rec_sort(vals[], 4)
你到底想做什么? []
是一个索引操作,所以要么你需要在那里放一个数字,要么完全不用它(如果你想谈论整个数组)。
答案 4 :(得分:0)
你应该做的第一件事是删除方括号:
printf("this array sorted: %x\n", rec_sort(vals, 4));
其次,请注意rec_sort返回void,因此您无法使用返回值
你需要
int i; // at the top of the main
// ...
rec_sort(vals, 4);
printf("this array sorted: ");
for(i = 0; i < 4; ++i) printf("%x ", vals[i]);
printf("\n");
第三:你需要再次调用rec_sort
第四:你试图用system
声明做什么?