递归排序函数

时间:2011-02-10 00:26:03

标签: c recursion

我编写了一个递归排序数组的程序。 但是,我在第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); 
}

5 个答案:

答案 0 :(得分:3)

只需删除第11行的[]即可。但这对您的问题是一个天真的答案,并且不会让您走得太远。还有其他问题 - 最明显的是printf(..., rec_sort(...)...);

的想法

考虑到rec_sortvoid返回类型,您希望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声明做什么?