该函数假定按升序对随机整数数组进行排序。我找到了一种解决此问题的方法,即冒泡排序,如果b
void ft_sort_integer_table(int *tab, int size)
{
int i;
int j;
int t;
i = 1;
j = 0;
t = 0;
while (tab[j] != '\0')
{
if (tab[i] < tab[j])
{
t = tab[i];
tab[i] = tab[j];
tab[j] = t;
}
i++;
j++;
}
}
答案 0 :(得分:3)
除非事先确保值0
终止缓冲区,并且不出现在数组的其他位置(例如,您使用空终止字符串),否则无法测试tab[i]
为零确定您已到达数组末尾。您的函数也将size
作为参数;为什么不使用它?
编辑:此外,O(n)中没有运行排序算法。冒泡排序看起来像您要实现的那样,需要两个嵌套循环。
答案 1 :(得分:2)
跳过排序算法的此实现的正确性(似乎是错误的),细分是由您正在执行的空终止检查引起的。 NULL('\0')
字符是为字符串或C编程语言中的char数组类型指定的,用于指示其终止。它不适用于int
类型的数组。您应该使用size
参数来迭代数组。
答案 2 :(得分:1)
您不使用size
参数。相反,您尝试查找不应该有int数组的null终止符(与C字符串不同)。因此,如果您必须将j
与size
进行比较,并保持交换状态直到数组被完全排序。
此外,最好还是使用size_t size
而不是int size
来保持学步。
答案 3 :(得分:1)
您将数组和大小传递给排序函数,但不要在任何地方使用size
,因此i
和j
可能会超出范围,从而导致不确定的行为。
一个int数组可以包含0,因此您需要其他有关结束排序的条件。例如。当您遍历数组[0..size]
中的所有元素并且不进行交换时-它将被排序。
答案 4 :(得分:0)
首先,您的while循环逻辑是错误的。字符“ \ 0”是指字符串末尾的空字符。如果将其与int类型进行比较,则没有任何意义。 其次,您实现的逻辑是将数组(而不是单个元素)与所有其他元素并排比较,并将其放置。我建议您研究气泡排序。 Geekforgeeks是CSE专家的最佳来源。希望它能解决。干杯!随时提问