数组前半升序后半降序排序异常及分段显示疑问
问题:数组后半部分降序排序未生效的原因排查
我编写了如下Java代码,意图将数组前半部分(索引0至4)按升序排序,后半部分(索引5至9)按降序排序。但运行后发现后半部分未实现正确降序,当前输出不符合预期,请问问题原因是什么?
代码实现
static void ascending_sort(int arr[],int lb,int ub) { for(int i=lb; i<ub ; i++) { for(int j=lb; j<ub-i-1; j++) { if(arr[j]>arr[j+1]) { int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } } static void descending_sort(int arr[],int lb,int ub) { for(int i=lb; i<ub ; i++) { for(int j=lb; j<ub-i-1; j++) { if(arr[j]<arr[j+1]) { int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } } static void display(int arr[],int n) { System.out.println("The array displaying in the display method after opeartion..."); for(int i=0;i<n;i++) { System.out.println(arr[i]); } } public static void main(String args[]) { int arr[]={49,80,2,56,10,94,40,12,25,60}; System.out.println("First part when displaying in main function.."); ascending_sort(arr,0,5); for(int i=0;i<5;i++) { System.out.println(arr[i]); } descending_sort(arr, 5,10); System.out.println("second part when displaying in main function.."); for(int i=5;i<10;i++) { System.out.println(arr[i]); } display(arr,10); }
当前输出
First part when displaying in main function.
2 10 49 56 80
Second part when displaying in main function.
94 40 12 25 60
The array displaying in the display method after operation
2 10 49 56 80 94 40 12 25 60
期望输出
数组前半部分(索引0-4)升序,后半部分(索引5-9)降序,即后半部分应为 94,60,40,25,12。
问题原因分析
你的降序排序函数descending_sort的内层循环边界计算错误,导致后半部分数组没有被完整遍历排序。
具体来看:
- 调用
descending_sort(arr,5,10)时,lb=5,ub=10 - 外层循环
i从5开始,当i=5时,内层循环条件j < ub - i -1即j < 10-5-1=4,但j的起始值是5,此时j <4不成立,内层循环直接跳过 - 后续
i增大时,ub-i-1的值更小,内层循环根本没执行有效交换,后半部分除了第一个元素,其余都没参与排序过程
修正方案
调整降序排序函数的循环边界,让其适配从lb到ub-1的子数组范围,更直观的实现方式如下:
static void descending_sort(int arr[],int lb,int ub) { int subLength = ub - lb; // 外层循环控制排序轮数,子数组共subLength个元素,需要subLength-1轮 for(int i=0; i < subLength-1 ; i++) { // 内层循环每轮将当前最大元素移到子数组的末尾 for(int j=lb; j < lb + subLength - i -1 ; j++) { if(arr[j]<arr[j+1]) { int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } }
修正后,后半部分数组会被正确降序排序,输出符合预期。
内容的提问来源于stack exchange,提问作者ADITYA SAHA
相关产品推荐
相关产品推荐

