2015-05-23 3 views
1

Предположим, что у меня есть массив со следующими элементамиСортировка нескольких заданных диапазонов в массиве

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

и у меня есть второй массив обр

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

Теперь я хочу, чтобы отсортировать arr2 с помощью обр в ОКС таким образом, что он получает отсортированный, как это и последний массив становится

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

к сведению, что обр [0] = 4, следовательно, первый четыре элемента сортируются в ASC 21,31,41,51

затем обр [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]; 
} 
+0

Не могли бы вы показать мне простой пример? – prateek569

+0

@ prateek569 хорошо? –

Смежные вопросы