我真的是c编程新手,我不知道如何使它工作。我想让排序函数用2个参数对整数数组进行排序。我想对排序函数使用递归。从数组末尾到第一个排序。按升序排列
void ft_sorting(int *arr, int size);
但我不知道哪里出错了。这完全超出了我对指针和数组的理解。现在我真的不知道。有人能指出我做错了什么吗?还有我需要学习和解决的问题。谢谢你!
void ft_recure(int *a, int *b, int j, int k)
{
if (--j >= 0)
{
if (a[k] < b[j])
{
a[k] = b[j];
}
else
{
ft_recure(a[k], b[j], j, k);
}
}
else
return a[k];
}
void ft_sort(int *tab, int size)
{
int i;
int h;
while (size > 0)
{
i = size;
h = i;
tab[size] = ft_recure(tab, tab, i, h);
size--;
}
}
我也试过这个
int ft_recurs(int x, int y, int a, int b)
{
int j;
j = a;
if( a > 0)
{
if(*x < *(y - 1);)
{
b = *(y - 1);
*x = b;
}
ft_recurs(*x,*(y - 1),a - 1, b);
}
else
{
return *x;
}
}
void ft_sort_int_tab(int *tab, int size)
{
int memo;
int i;
while(--size >= 0)
{
i = size;
tab[size] = ft_recurs(tab[i], tab[size], i, memo);
}
}
在第一种方法中,您在再次调用API时做得不正确:
void ft_recure(int *a, int *b, int j, int k)
{
if (--j >= 0)
{
if (a[k] < b[j])
{
a[k] = b[j];
}
else
{
ft_recure(a[k], b[j], j, k);
}
}
else
return a[k];
}
a和b输入到API ft_recure是一个指针,但在ft_recure(a[k], b[j], j, k);
它是值。如果您希望输入k和j个元素的地址,则应将其更正为:ft_recure(&a[k], &b[j], j, k);
。
在你的替代用法中:
int ft_recurs(int x, int y, int a, int b)
{
int j;
j = a;
if( a > 0)
{
if(*x < *(y - 1);)
{
b = *(y - 1);
*x = b;
}
ft_recurs(*x,*(y - 1),a - 1, b);
}
else
{
return *x;
}
}
输入是值,但在函数中,您使用*x
和*(y-1)
不是真正正确的方式。也许你可以试试int ft_recurs(int x[], int y[], int a, int b)
。但是,如果是这样,您还需要在ft_recurs(*x,*(y - 1),a - 1, b);
处提供指针地址,然后问题回到类似于第一种方法。