【问题标题】:Sorting multiple specified ranges in an array对数组中的多个指定范围进行排序
【发布时间】:2023-03-11 15:55:01
【问题描述】:

假设我有一个包含以下元素的数组

int arr2[]={21,31,41,51,54,29,15,18,19,16,17};

我有第二个数组 arr

int arr[]={4,2,5};

现在我想借助 ACS 中的 arr 对 arr2 进行排序,使其像这样排序,最终数组变为

Final array should be 21,31,41,51,29,54,15,16,17,18,19

注意 arr[0]=4 因此前四个元素在 ASC 21,31,41,51 中排序

然后 arr[1]=2 因此接下来的两个元素在 ACS 中排序,所以它变成 21,31,41,51,29,54

然后 arr[2]=5 因此接下来的五个元素将在 ASC 中排序,因此它变为 21,31,41,51,29,54,15,16,17,18,19

现在最终数组变为 21,31,41,51,29,54,15,16,17,18,19

我怎样才能进行这种排序?

我用来执行此操作的代码是

int arr2[]={21,31,41,51,54,29,15,18,19,16,17};
       int arr[]={4,2,5};

我可以使用下面的代码实现结果,但问题是当数组/元素的数量未知时我无法缩短它。

for (i=0;i<4-1;i++) 
         {
              for (j=i+1;j<4; j++)
              {
                   if( arr[i] > arr[j] )       
                   {
                           temp = arr[i];   
                           arr[i] = arr[j];
                           arr[j] = temp; 
                    }           
              }
         }

       for (i=5;i<6-1;i++) 
         {
              for (j=i+1;j<7; j++)
              {
                   if( arr[i] > arr[j] )       
                   {
                           temp = arr[i];   
                           arr[i] = arr[j];
                           arr[j] = temp; 
                    }           
              }
         }

       for (i=7;i<11-1;i++) 
         {
              for (j=i+1;j<10; j++)
              {
                   if( arr[i] > arr[j] )       
                   {
                           temp = arr[i];   
                           arr[i] = arr[j];
                           arr[j] = temp; 
                    }           
              }
         }

【问题讨论】:

  • 请考虑接受其中一个答案,如果它回答了您的问题。

标签: java arrays sorting


【解决方案1】:

http://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#sort-byte:A-int-int-

有接受范围的Arrays.sort 方法。您的问题的解决方案变为:

int arr2[]={21,31,41,51,54,29,15,18,19,16,17};
int arr[]={4,2,5};

int start_index = 0;
for(int i=0; i < arr.length; ++i)
{
  Arrays.sort(arr2,start_index,start_index+arr[i]);
  start_index += arr[i];
}

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 2020-03-21
    • 2017-10-30
    • 2017-07-16
    • 1970-01-01
    • 2019-02-07
    • 2018-02-04
    • 2018-11-28
    • 1970-01-01
    相关资源
    最近更新 更多