gpt4 book ai didi

c - C语言——快速排序

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:27 30 4
gpt4 key购买 nike

我试图用 c 编写一个快速排序程序,但我的递归函数处于无限循环中。

问题是:

你得到了一个数组尺寸AN.这个数组包含整数范围从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;
}

你能告诉我错误在哪里吗?

最佳答案

你正在使用递归,所以你不需要循环:

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);
}
}

关于c - C语言——快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45315052/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com