2013-10-03 3 views
-2

unsorted array и integer k, создать метод, который перестраивает элементы в массиве так, чтобы все элементы, меньшие или равные k, приходили к любым элементам, большим k.создать метод сортировки массива

вот мой код и он не работает

public class SmallerFirst 
{ 
    public int[] sort(int[] a, int k) 
    { 

     if(a.length == 1) 
     { 
      return a; 
     } 

     if(a.length == 0) 
     { 
      return a; 
     } 

     else 
     { 
      int last = (a.length-1); 
      for(int pos=0; pos<a.length; pos++) 
      { 
       for(int x=1;x>0;x++) 
       { 
        if(last == 0) 
        { 
         break; 
        } 
        if(a[pos] > k) 
        { 
         swap(a,pos,last); last--; continue; 
        }   
        else 
        { 
         break; 
        } 
       }  
      } 
      return a; 
     } 
    } 

    public void swap(int[] a,int p1,int p2) 
    { 
     int temp = 0; 
     temp = a[p2]; 
     a[p2] = a [p1]; 
     a[p1]=temp; 
    } 

} 
+0

Если это для класса, попробуйте решить проблему. в противном случае используйте Arrays.sort (...) :) Или еще посмотрите код Arrays.sort – Optional

+0

Вам нужно сохранить заказ, в котором они появляются? Как '[1,3,5,2,10] k = 4' приводит к' [1,3,2,5,10] '? – Gamb

+2

'for (int x = 1; x> 0; x ++)' Что это такое? – SpongeBobFan

ответ

0

Arrays.sort(yourIntArray) будет очевидным выбором.

+0

не самый эффективный способ, я думаю, это отсортировало бы весь массив, но я думаю, что это нормально с этим 11,9,7,12,20,17,19 для элемент 12 –

+0

Я не претендовал на предоставление самого эффективного способа, но, наверное, самый простой :) –

0

Это должно делать то, что вы хотите

public static void sort(int[] a, int k) { 
    if(a.length > 1) { 
     int last = (a.length-1), 
      first = 0; 
     while(last > first) { 
      if(a[first] <= k) first++; 
      else if(a[last] > k) last--; 
      else swap(a, first, last); 
     } 
    } 
} 
0

переставить элементы в массиве таким образом, чтобы все элементы меньше или равно к перед любыми элементами больше, чем к.

  • проблема не нужен массив будет отсортирован.
  • Arrays.sort() удобно, но это излишне превращает O(n) проблему в O(nlogn) проблем
  • прямолинейное решение, время: O(n) и пространства O(n), то есть, вы готовите пустой массив, такой же размер, как входной массив, то петля через входной массив, если element <= k, поместите его в пустой массив слева, иначе положите его с правой стороны.
  • это может быть сделано по времени O(n) и пространстве O(1) хотя, (на месте ПЕРЕЕЗД), что-то подобное может дать вам результат:

(a будет являться int[] массив, а k является k в вашей проблеме)

int p = -1; // flag pointer 
    int w = 0; // working pointer 

    for (; w <= a.length - 1; w++) { 
     if (a[w] <= k) { 
      p++; 
      if (w != p) { 
       swap(a, p, w); 
      } 
     } 
    } 
Смежные вопросы