假设我有一个包含以下元素的数组
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;
}
}
}
答案 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];
}