对数组中的多个指定范围进行排序

时间:2015-05-23 06:43:39

标签: java arrays sorting

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

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; 
                    }           
              }
         }

1 个答案:

答案 0 :(得分: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];
}