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

数组前半升序后半降序排序异常及分段显示疑问

问题:数组后半部分降序排序未生效的原因排查

我编写了如下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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:11:12