2016-03-07 2 views
1

Я хочу отделить отрицательные числа и положительные числа в массиве.Как отделить отрицательные числа и положительные числа от массива?

Например, если мой массив имеет 10 значений и они {-8,7,3, -1,0,2, -2,4, -6,7}, я хочу, чтобы новый модифицированный массив был {-6, -2, -1, -8,7,3,0,2,4,7}.

Я хочу сделать это в O (n^2), и я также написал код. Но я не получаю правильных результатов. Где мой код неправильный?

import java.util.Random; 
public class Apples { 

    public static void main(String[] args) { 
     Random randomInteger=new Random(); 
     int[] a=new int[100]; 
     for(int i=0;i<a.length;i++) 
     { 
      a[i]=randomInteger.nextInt((int)System.currentTimeMillis())%20 - 10; 
     } 
     for(int i=0;i<a.length;i++) 
     { 
      if(a[i]<0) 
      { 
       int temp=a[i]; 
       for(int j=i;j>0;j--) 
       { 
        a[j]=a[j-1]; 
        j--; 
       } 
       a[0]=temp; 
      } 
     } 
     for(int i=0;i<a.length;i++) 
     { 
      System.out.print(a[i]+" "); 
     } 

    } 
} 
+0

Что такое правило, чтобы определить порядок цифр, особенно если эти признаки одинаковы? Реверс ввода для отрицательных чисел и того же порядка, что и вход для неотрицательных чисел? – MikeCAT

+0

Извините, я не совсем понял ваш комментарий. Я просто пытаюсь взять все отрицательные числа и выбросить их в начало массива. Таким образом, к концу, у меня будут все мои отрицательные числа в начале, а затем положительные числа (включая ноль) к концу. –

+0

удалите строку 'j -;', потому что вы сделали это для цикла – Jerry06

ответ

0

У вас есть два j--, пока вам нужен только один, поэтому удалите один из них.

for(int j=i;j>0;j--) 
{ 
    a[j]=a[j-1]; 
    // remove j--; from here 
} 
-1

Вы можете рассмотреть следующее как альтернативный способ выполнения разделения негативов/положительных элементов. Это основано на K & R быстрой сортировки, но только делает один передать массив:

import java.util.Random; 

public class Sweeper { 
    public static void printArray(int[] a) { 
     for (int elt : a) { 
     System.out.print(elt + " "); 
     } 
     System.out.println(); 
    } 

    public static void swap(int[] a, int i, int j) { 
     int tmp = a[i]; 
     a[i] = a[j]; 
     a[j] = tmp; 
    } 

    public static void partition(int[] a, int target) { 
     int last = 0; 
     for (int i = 0; i < a.length; ++i) { 
     if (a[i] < target && i != last) swap(a, i, last++); 
     } 
    } 

    public static void main(String[] args) { 
     Random rng = new Random(); 
     int[] a = new int[20]; 
     for (int i = 0; i < a.length; i++) { 
     a[i] = rng.nextInt(20) - 10; 
     } 
     printArray(a); 
     partition(a, 0); 
     printArray(a); 
    } 
} 
+0

Не то, что требуется, это также изменит порядок элементов, например, If Input: -6 7 -10 7 -8 -2 2 -9 8 -2 3 6 -8 4 0 -7 -3 7 7 4, выход будет -6 -10 -8 -2 -9 -2 -8 -7 -3 7 3 6 2 4 0 7 8 7 7 4, но выход должен быть: -6 -10 -8 -2 -9 -2 -8 -7 -3 7 7 2 8 3 6 4 0 7 7 4 – PyThon

+0

@ Приказ PyThon не был заявленным требованием. Люди, которые делают вещи вручную, имеют тенденцию делать их последовательно, и это было моим восприятием его примера. – pjs

+0

@PyThon Кстати, обратите внимание, что пример OP также изменяет исходный порядок отрицательных величин. – pjs

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