2017-07-25 14 views
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はここであなたは私を伝えることができます!あなたがループを必要としないので、あなたは再帰を使用している

+2

開始と終了は、一度 –

+2

しばらく渡さ変更することはありませんが、あるべき –

+1

ところで '10^6'「場合は、」'です1000000' 、 '100000'ではなく – BLUEPIXY

答えて

2

void sort_array(unsigned int a[], int start, int end){ 
    if(start < end){ 
    int pos_piv = partition(a, start, end); 
    sort_array(a, start, pos_piv-1); 
    sort_array(a, pos_piv+1, end); 
    } 
}