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

传统Bubble Sort与自定义实现代码的差异及原因解析

两段冒泡排序实现的差异与原因分析

代码实现对比

传统冒泡排序

public int[] sort_bubbleSort(int[] nums){
  for (int i=0; i < nums.length-1; i++){
    for (int j=0; j < nums.length-1-i; j++)
      if (nums[j] > nums[j+1]) {
        int temp = nums[j];
        nums[j] = nums[j+1];
        nums[j+1] = temp;
      }
    }
  return nums;
}

自定义排序变体

public int[] sort_bubbleSort(int[] nums){
  for(int left = 0; left<nums.length; left++) {
    for(int right =left+1; right<nums.length; right++) {
      if(nums[left] > nums[right]) {
        int temp = nums[left];
        nums[left] = nums[right];
        nums[right] = temp;
      }
    }
  }return nums;
}

核心差异

  • 比较交换逻辑
    传统冒泡排序只比较相邻元素,前一个大于后一个时交换,每轮把当前未排序部分的最大元素"推"到末尾的有序区间;自定义变体则固定一个基准位置(left),用right遍历后续所有元素,只要基准元素大于当前right元素就交换,每轮把未排序部分的最小元素"拉"到基准位置。
  • 内层循环范围
    传统冒泡排序的内层循环范围会随外层循环逐步缩小(nums.length-1-i),因为末尾的i个元素已经是有序的最大元素,无需重复比较;自定义变体的内层循环始终从left+1遍历到数组末尾,不管前面的元素是否已有序。
  • 交换频率
    传统冒泡排序每轮最多进行n-i-1次相邻交换,每次只调整相邻元素的位置;自定义变体每轮可能多次交换基准元素和后续元素,交换次数通常比传统冒泡更多。

背后原因

两段代码的设计思路本质不同:

  • 传统冒泡排序是冒泡思想的标准实现:通过相邻元素的逐步交换,让大元素"冒泡"到正确位置,每轮确定一个最大元素的位置,属于"从后往前构建有序区间"。
  • 自定义变体实际更贴近选择排序的逻辑:每轮筛选未排序部分的最小元素放到当前基准位置,但选择排序通常是先找到最小元素的下标,最后只做一次交换,而这段代码是遇到更小的元素就直接交换,相当于把选择排序的"找最小值+单次交换"改成了"多次交换"。

内容的提问来源于stack exchange,提问作者EMİR HAMARAT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:50:47