由升序排序整数数组,段故障:11

问题描述 投票:1回答:5

该函数假定由升序排序随机整数数组。我发现用于解决该问题,冒泡排序,用b swaping一个如果B <的方法。然而,我的实现,或缺乏它,保持返回分段错误:11它可能是与参数“INT *标签”或标元素的swaping期间我使用?

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++;
  }
}
c sorting
5个回答
3
投票

除非你事先保证的价值0终止您的缓冲,不会在数组中出现的其他地方(比如你是空终止字符串),你不能测试tab[i]为零,以确定你已经达到了数组末尾。你的函数将size作为参数太多;为什么不利用呢?

编辑:另外,没有排序算法在O(n)的运行。冒泡排序,它看起来像你想实现什么,需要两个嵌套循环。


2
投票

跳过此实现排序算法的正确性(因为它似乎是错误的)的分段由空终止检查你正在做造成的。所述NULL('\0')字符的字符串,或者在C程序设计语言字符数组类型中指定,并且它用于用信号通知其终止。它不int类型数组。你应该使用size论据遍历数组。


1
投票

你不使用size参数。相反,你正试图找到空终止其int数组是不应该有(不像C-字符串)。所以,如果你有比较jsize并保持交换,直到阵列完全排序。

此外,它是用size_t size代替int size为了保持迂腐的更好。


1
投票

你传递一个数组和大小的排序功能,但没有在任何地方使用的size如此大的潜在ij能出去导致未定义的行为界限。

所以你需要有当你的排序是完成了其他标准的int数组可以包含0。例如。当你通过在阵列[0..size]的所有元素,并没有做交换 - 然后进行排序。


0
投票

首先,while循环的逻辑是错误的。字符“\ 0”指的是在字符串末尾的空字符。如果你用的int类型比较呢?这是没有意义的。其次,你实现的逻辑比较由阵列的侧面元件侧而不是一个单一元件与所有其他并将其放置。我建议你学习冒泡排序。 Geekforgeeks是CSE球员的最佳来源。希望它解决了。干杯!随意问的问题

© www.soinside.com 2019 - 2024. All rights reserved.