0
私はクイックソートプログラムをCでコーディングしようとしていましたが、私の再帰関数は無限ループにあります。言語C - QuickSort
問題がある:
あなたは配列 を与えられた大きさの N.This配列は 1から 10^9の範囲の整数が含まれています。この配列の内容を値でソートし、その内容を出力する必要があります。
入力形式:
最初の行は、Nアレイのサイズを示す単一の整数を含みます。次の行には、配列の内容を示すN個のスペースで区切られた整数が含まれています。
出力フォーマット:
印刷Nスペースで区切られた整数、すなわち最終ソートされた配列。
制約:
1≤N≤10^ 6
1≤A[i]は≤10^ 9
void fill_vet(unsigned int a[], unsigned int n){
int i;
for(i=0; i<n; i++)
scanf("%u", &a[i]);
}
void print_vet(unsigned int a[], unsigned int n){
int i;
for(i=0; i<n; i++)
printf("%u ", a[i]);
}
int partition(unsigned int a[], int start, int end){
int i, j;
unsigned int pivot, n_swap;
i = start + 1;
pivot = a[start];
for(j = start+1; j<=end; j++){
if(a[j] < pivot){
n_swap = a[j];
a[j] = a[i];
a[i] = n_swap;
i++;
}
}
n_swap = a[i-1];
a[i-1] = a[start];
a[start] = n_swap;
return i-1;
}
void sort_array(unsigned int a[], int start, int end){
while(start < end){
int pos_piv = partition(a, start, end);
sort_array(a, start, pos_piv-1);
sort_array(a, pos_piv+1, end);
}
}
int main()
{
unsigned int n, a[100000];
scanf("%u", &n);
fill_vet(a, n);
sort_array(a, 0, n-1);
print_vet(a, n);
return 0;
}
エラーがplsはここであなたは私を伝えることができます!あなたがループを必要としないので、あなたは再帰を使用している
開始と終了は、一度 –
しばらく渡さ変更することはありませんが、あるべき –
ところで '10^6'「場合は、」'です1000000' 、 '100000'ではなく – BLUEPIXY