You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单独实现swap交换函数后冒泡排序运行失效是什么原因?

问题根因

这是Java参数传递机制导致的问题:Java中所有参数都是值传递:

  • 你当前定义的swap方法入参是两个int基本类型,调用swap(arr[j], arr[j+1])时,只是把数组两个位置的值拷贝了一份传给形参a、b,在swap内部修改a、b的值,完全不会影响原数组里的元素,交换逻辑本质没有生效,因此排序失效。
  • 如果直接在冒泡循环里写交换代码,是直接修改数组对应下标的元素值,自然可以正常运行。
修复方案
  • 方案1:修改swap方法入参,传入数组本身和要交换的两个下标,直接操作数组元素(推荐)
    修改后的swap方法如下:
void swap(int[] arr, int index1, int index2)
{
    int temp = arr[index1];
    arr[index1] = arr[index2];
    arr[index2] = temp;
}

同时把冒泡循环里的调用改为swap(arr, j, j+1)即可。

  • 方案2:直接把交换逻辑写在冒泡排序的判断分支中,不抽离独立swap函数。
修正后完整可运行代码
public class BubbleSort
{
  void swap(int[] arr, int index1, int index2)
  {
    int temp = arr[index1];
    arr[index1] = arr[index2];
    arr[index2] = 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, 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] + " ");
  }
}

内容的提问来源于stack exchange,提问作者Markins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:06:03