【问题标题】:Bubble sort not working when swapping done separately [duplicate]单独交换时冒泡排序不起作用[重复]
【发布时间】:2021-11-20 03:14:25
【问题描述】:

我的代码仅在我在冒泡排序函数中使用交换时才有效,但如果我删除该部分并将其放入函数中然后调用它以用作交换。它不起作用并给我一个错误的输出。我无法理解有什么问题

public class BubbleSort
{
  void swap(int a, int b)
  {
    int temp;
    temp = a;
    a = b;
    b = temp;
  }
  
  void sort(int arr[])
  {
    int i, j, n=arr.length;
    
    for(i=0; i<n-1; i++)
    {
      for(j=0; j<(n-i-1); j++)
      {
        if(arr[j] > arr[j+1])
          swap(arr[j], arr[j+1]);
      }
    }
  }
  
  public static void main(String[] args)
  {
    int i;
    int arr[] = {12, 3, 4, 10, 40, 89, 60, 55, 96, 11};
    BubbleSort ob = new BubbleSort();
    ob.sort(arr);
    System.out.println("Array after sorting:");
    for(i=0; i<arr.length; i++)
      System.out.print(arr[i] + " ");
  }
}

【问题讨论】:

  • 我不明白,为什么该问题已关闭(并且对非特权用户隐藏)。这与“参考”与“价值”无关。这是关于交换两个变量。当然,这个问题很容易回答,但它仍然是一个定义明确的问题。
  • “这与引用与值无关”,然后您以“Java 中的参数通过值传递,而不是通过引用”开始回答。这完全是关于参考与价值的关系,并且在那里回答了为什么交换不起作用的答案。
  • 这个问题肯定是由引用线程的答案来回答的,但问题本身并不相同。允许两个不同的问题有相同的答案。这个问题不会[重复]另一个问题。
  • @30thh 对于重复关闭问题不必相同。答案和基本解释是确定问题是否重复的那些。
  • @Dailija 真的吗?根据这个逻辑,“欧洲最大城市”这个问题与“俄罗斯首都”这个问题重复,只是因为两者的答案都是“莫斯科”。即使您将解释和城市的整个历史都包含在答案中,也不会改变事实。两个原始问题是不同的,不要相互重复。

标签: java arrays sorting swap bubble-sort


【解决方案1】:

Java 中的方法参数是按值传递的,而不是按引用传递的。这样的作业毫无意义:

void swap(int a, int b)  {
  int temp;
  temp = a;
  a = b;
  b = temp;
}

这个方法之外的调用者不会看到这个。对他来说,“a”和“b”将保持其旧值。

作为一种快速解决方法,您可以使用 AtomicInteger 实例来包装值。

【讨论】:

    猜你喜欢
    • 2017-04-03
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    相关资源
    最近更新 更多