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

Java实现递归变种Bubble Sort仅前2/3元素有序问题求助

递归变种冒泡排序问题排查建议

问题背景

我是一名修读DSA课程的学生,本次作业要求实现递归变种的Bubble Sort。作业已经提交,但我编写的代码始终无法正常运行,反复检查三遍仍未找到问题,十分困扰。

算法伪代码要求

if (n > 10) // n being the size of array A
   sort recursivley the first 2/3 elements in A (from 0 to ceil(2n/3))
   sort recursivley the last 2/3 elements in A (from floor(n/3) to n)
   sort recursivley the first 2/3 elements in A (from 0 to ceil(2n/3))
else
   use bubbleSort

现有实现代码

public static void weirdSort(double[] arr, int start, int end, int size) {
        
        if (size > 10) {
            int weirdStart = (size / 3) - 1;
            int weirdEnd = (end - weirdStart) - 1;
            int weirdSize = (weirdEnd - start + 1);
            weirdSort(arr, start, weirdEnd, weirdSize);
            weirdSort(arr, weirdStart, end, weirdSize);
            weirdSort(arr, start, weirdEnd, weirdSize);
        }
        else 
            bubbleSort(arr, start, end);
    } // end of method

private static void bubbleSort(double arr[], int start, int end) {
        
        int size = end - start + 1;
        boolean noSwaps;
        
        for (int i = start; i < size; i++) {
            noSwaps = true;
            for (int j = start + 1; j < size - i; j++) {
                if (arr[j - 1] > arr[j]) {
                    swap(arr, j, j - 1);
                    noSwaps = false;
                } // end of condition
            } // end of (j) for loop
            if (noSwaps) // If no two elements were swapped by inner loop, array is sorted
                break;
        } // end of (i) for loop
    } // end of method

现有问题

代码仅能将数组前2/3的元素排序,最后1/3的元素始终处于无序状态(单独调用bubbleSort功能正常)。希望获取排查思路,不需要直接给出完整解决方案。

排查方向建议

  • 先核对递归边界计算逻辑:逐行输出weirdStart、weirdEnd、weirdSize三个变量的实际取值,和伪代码要求的ceil(2n/3)、floor(n/3)边界对比,确认整数除法的截断规则是否符合预期,有没有多减或者少减偏移量
  • 核对递归调用的入参:重点看第二次递归(排序最后2/3元素)时传入的size参数,是否和当前待排序的子数组实际长度一致,有没有误用其他分段的size值
  • 排查bubbleSort的遍历范围:虽然单独调用bubbleSort正常,但确认当start不为0时,内层循环的终止条件j < size - i是否能覆盖到end位置,有没有漏掉start的偏移量导致后半段没有遍历到
  • 用小尺寸可拆分的数组(比如长度12、15)做单步调试,每完成一次递归调用就打印当前数组的全量内容,看哪一次递归的排序结果不符合预期,快速定位问题所在层级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 13:45:03