c - 按升序对整数数组进行排序,分割错误:11



该函数假设按升序对随机整数数组进行排序。我找到了解决这个问题的方法,气泡排序,如果 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 字符串不同(。因此,如果您必须jsize进行比较并继续交换,直到数组完全排序。

此外,最好使用size_t size而不是int size以保持迂腐。

您将数组和大小传递给排序函数,但不要在任何地方使用该size,因此可能会ij越界,从而导致未定义的行为。

int 数组可以包含 0,因此您需要为排序完成时间设置其他条件。 例如,当您遍历数组中的所有元素时[0..size]并且不进行交换 - 然后它被排序。

首先,你的while循环逻辑是错误的。字符"\0"是指字符串末尾的空字符。如果将其与 int 类型进行比较,则没有意义。其次,您实现的逻辑是将数组的元素并排比较,而不是将单个元素与所有其他元素进行比较并放置它。我建议你研究气泡排序。Geekforgeeks是CSE人的最佳来源。希望它能解决。干杯!!随时提问

最新更新