2011-02-10 14 views
1

配列を再帰的にソートするプログラムを作成しました。 しかし、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

はこの宿題ですか? – tenfour

答えて

3

あなたはprintfへの1回の呼び出しでCが実行しない配列全体を印刷しようとしているようです。代わりに、配列を反復処理し、個別に各番号を印刷するループを必要とする:

for (i=0; i<4; i++) 
    printf("%x\n", vals[i]); 

rec_sortは、配列を返すされていないので、あなたも「コール別にprintf関数を、それを呼び出すために必要なので、あなた以下のような何かを得るdは:

// sort the data: 
rec_sort(vals, 4); 

// print the sorted values: 
for (i=0; i<4; i++) 
    printf("%x\n", vals[i]); 
+0

CはJavaほど柔軟ではないことを忘れていました。今私は次のエラーが表示されます:並べ替えへの未定義参照 – kachilous

+0

@Krysten、一番下の 'sort(values、n-1);を見てくださいそれはタイプミスです! ':)' – Muggen

+0

コンパイルして実行します。しかし、今私はファンキーな番号を取得します:25 30 38 3f – kachilous

3

ジャストライン11に[]を削除しかし、これは、あなたの質問に答えナイーブで、はるかにあなたを得ることはありません。他の問題があります - 最も明白はrec_sortvoid戻り値の型を持って考えるとprintf(..., rec_sort(...)...);

のアイデアです、あなたはprintf()は何をすべきかを理解することを期待しますか?私はあなたがどちらが欲しいかわからないが、これは少なくともあなたのためのスタートでなければならない。

+0

まだコンパイルされていません – kachilous

+0

@Krysten、どのようなエラーが発生しますか? – Muggen

+0

rec_sortが無効であるか、Cの –

0

問題は、このです:

rec_sort(vals[], 4) 

あなたがそこに何をしたいか、正確には何? []はインデックス操作なので、そこに数字を入れるか、完全なままにしておく必要があります(配列全体について話したい場合)。

+0

オペレーションは、rec_sortにvalues []パラメータがあるので、vals []引数を使用して呼び出すことができるという合理的な前提がありました。しかし、そういう仮定をしてプログラミングすることはできませんが、実際にはプログラミング言語のルールを学ばなければなりません。しかし、何かがうまくいかないときはいつでも、あなたがちょうどSOに来ることができれば、何かを学ぶのはどうですか?そのアプローチを取った人たちは、結局それで遠くに得ることができないことを最終的に学ぶでしょう。 –

1
printf("this array sorted: %x\n", rec_sort(vals[], 4)); 

しかしrec_sort()voidです。

void rec_sort(int values[], int n) 

はまた、宣言しないreturn何もないあなたの主なint main()として

0

あなたが最初にすべきことは、角括弧の削除である:それrec_sortはvoidを返す注意し、

printf("this array sorted: %x\n", rec_sort(vals, 4)); 

第二に、戻り値は使用できません。

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文で何をすべきかトラインされていますか?

+0

"第三:あなたはソートの実装が必要です(あなたはqsortを意味しませんか?)"いいえ、彼女は明らかにrec_sortを意味します - それは再帰的であるはずです。 –