私は、プログラミング クラスの課題の一部として、再帰的なクイック ソートのコードを C で作成しています。すべてを書きましたが、コンパイルすると次のエラーが発生します。
- 1>quick_sort.c(32): error C2143: syntax error : missing ';' before 'type'
- 1>quick_sort.c(33): error C2143: syntax error : missing ';' before 'type'
- 1>quick_sort.c(35): error C2065: 'right' : undeclared identifier
- 1>quick_sort.c(36): error C2065: 'pivot' : undeclared identifier
- 1>quick_sort.c(39): error C2065: 'right' : undeclared identifier
- 1>quick_sort.c(39): error C2065: 'pivot' : undeclared identifier
- 1>quick_sort.c(40): error C2065: 'right' : undeclared identifier
- 1>quick_sort.c(42): error C2065: 'right' : undeclared identifier
これが私のコードです:
/*This code will take input for 10 integers given by the user
into an array and then sort them with a recursive quicksort
function and then print the updated array. */
#include <stdio.h>
#define ARRSIZE 10
void partition (int arr[],int size);
void val_swap (int a, int b);
int main (void){
int arr[ARRSIZE], left, right, i = 0;
while(i<ARRSIZE){
printf("\nInteger value %d:", i+1);
scanf("%d", &arr[i]);
i++;
}
left = 0;
right = ARRSIZE - 1;
partition(arr, right-left, left);
printf("\nThis is your updated array:");
printf("\n{");
for(i=0; i<ARRSIZE; i++){
printf("%d,", arr[i]);
}
printf("}");
return 0;
}
void partition (int arr[],int size, int left){
if(size < 2){
return;
}
int pivot = size/2;
int left = 0, right = size;
while(left < right){
while(arr[left] < arr[pivot]){
left++;
}
while(arr[right] > arr[pivot]){
right++;
}
val_swap(arr[left], arr[right]);
}
partition(arr,left, 0);
partition(arr, size-left, left+1);
}
void val_swap (int a, int b){
int temp = b;
b = a;
a = temp;
}
誰か提案はありますか?
編集:わかりました、すべてのエラーを修正しました。それらの多くは、ビジュアルスタジオが愚かだったことが原因でした。私のコードは、10から始まり1までカウントダウンする入力として1〜10の数字を入力したときのように、機能するようになりました。ただし、より複雑な数値を指定すると、配列の約半分しか正しく並べ替えられませんでした。
これが私の更新されたコードです:
/*This code will take input for 10 integers given by the user
into an array and then sort them with a recursive quicksort
function and then print the updated array. */
#include <stdio.h>
#define ARRSIZE 10
void partition (int arr[],int size, int left);
void val_swap (int *a, int *b);
int main (void){
int arr[ARRSIZE], left, right, i = 0;
while(i<ARRSIZE){
printf("\nInteger value %d:", i+1);
scanf("%d", &arr[i]);
i++;
}
left = 0;
right = ARRSIZE - 1;
partition(arr, right-left, left);
printf("\nThis is your updated array:");
printf("\n{");
for(i=0; i<ARRSIZE; i++){
printf("%d,", arr[i]);
}
printf("}");
}
void partition (int arr[],int size, int left){
int pivot, right;
pivot = size/2;
right = size;
if(size < 2){
return;
}
while(left < right){
while(arr[left] < arr[pivot]){
left++;
}
while(arr[right] > arr[pivot]){
right--;
}
val_swap(&arr[left], &arr[right]);
}
partition(arr,left, 0);
partition(arr, size-left, left+1);
}
void val_swap (int *a, int *b){
int temp = *b;
*b = *a;
*a = temp;
}
他に提案はありますか?