0
我想編寫一個快速排序程序在c中,我的遞歸函數是在一個無限循環。語言C - 快速排序
的問題是:
您已被給定的陣列大小的 甲 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;
}
你能告訴我哪裏是錯誤請!
起點和終點永遠不會改變,一旦在 –
而傳遞應該是「如果」 –
BTW'10^6'是'1000000' ,而不是'100000' – BLUEPIXY