该函数假设按升序对随机整数数组进行排序。我找到了解决这个问题的方法,气泡排序,如果 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] != ' ')
{
if (tab[i] < tab[j])
{
t = tab[i];
tab[i] = tab[j];
tab[j] = t;
}
i++;
j++;
}
}
除非事先保证该值0
终止缓冲区并且不会出现在数组中的其他地方(就像使用以 null 结尾的字符串一样(,否则您无法测试tab[i]
为零以确定您已到达数组的末尾。您的函数也将size
作为参数;为什么不使用它呢?
编辑:此外,没有排序算法在O(n(中运行。冒泡排序看起来像您尝试实现的内容,需要两个嵌套循环。
跳过此排序算法实现的正确性(因为它似乎是错误的(,分段是由您正在执行的空终止检查引起的。NULL(' ')
字符是为字符串或 C 编程语言中的 char 数组类型指定的,它用于表示它们的终止。它不适用于int
类型数组。您应该使用 size
参数来迭代数组。
不使用 size
参数。相反,您正在尝试查找 int 数组不应该具有的 null 终止符(与 C 字符串不同(。因此,如果您必须j
与size
进行比较并继续交换,直到数组完全排序。
此外,最好使用size_t size
而不是int size
以保持迂腐。
您将数组和大小传递给排序函数,但不要在任何地方使用该size
,因此可能会i
和j
越界,从而导致未定义的行为。
int 数组可以包含 0,因此您需要为排序完成时间设置其他条件。 例如,当您遍历数组中的所有元素时[0..size]
并且不进行交换 - 然后它被排序。
首先,你的while循环逻辑是错误的。字符"\0"是指字符串末尾的空字符。如果将其与 int 类型进行比较,则没有意义。其次,您实现的逻辑是将数组的元素并排比较,而不是将单个元素与所有其他元素进行比较并放置它。我建议你研究气泡排序。Geekforgeeks是CSE人的最佳来源。希望它能解决。干杯!!随时提问