老师您好,我看了您的归并排序自底向上的Java版本代码,运行以后,打印数组出来,发现打印出来的数组不是有序的,我怀疑是您的代码有问题,您有时间可以看一下吗?是经过优化的那里
1 2 3 4 5 6 7 8 9 10 | // // Merge Sort Bottom Up 优化 // // 对于小数组, 使用插入排序优化 for ( int i = 0 ; i < n; i += 16 ) InsertionSort.sort(arr, i, Math.min(i + 15 , n - 1 )); for ( int sz = 16 ; sz < n; sz += sz) for ( int i = 0 ; i < n - sz; i += sz + sz) // 对于arr[mid] <= arr[mid+1]的情况,不进行merge if (arr[i + sz - 1 ].compareTo(arr[i + sz]) > 0 ) merge(arr, i, i + sz - 1 , Math.min(i + sz + sz - 1 , n - 1 )); |