按升序排序整数数组,分段错误:11

时间:2019-02-10 18:48:22

标签: c sorting

该函数假定按升序对随机整数数组进行排序。我找到了一种解决此问题的方法,即冒泡排序,如果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++;
  }
}

5 个答案:

答案 0 :(得分:3)

除非事先确保值0终止缓冲区,并且不出现在数组的其他位置(例如,您使用空终止字符串),否则无法测试tab[i]为零确定您已到达数组末尾。您的函数也将size作为参数;为什么不使用它?

编辑:此外,O(n)中没有运行排序算法。冒泡排序看起来像您要实现的那样,需要两个嵌套循环。

答案 1 :(得分:2)

跳过排序算法的此实现的正确性(似乎是错误的),细分是由您正在执行的空终止检查引起的。 NULL('\0')字符是为字符串或C编程语言中的char数组类型指定的,用于指示其终止。它不适用于int类型的数组。您应该使用size参数来迭代数组。

答案 2 :(得分:1)

您不使用size参数。相反,您尝试查找不应该有int数组的null终止符(与C字符串不同)。因此,如果您必须将jsize进行比较,并保持交换状态直到数组被完全排序。

此外,最好还是使用size_t size而不是int size来保持学步。

答案 3 :(得分:1)

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

一个int数组可以包含0,因此您需要其他有关结束排序的条件。例如。当您遍历数组[0..size]中的所有元素并且不进行交换时-它将被排序。

答案 4 :(得分:0)

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