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
相关产品推荐
相关产品推荐

