Перемещение меньше чем элемент значения к последнему в массиве, используя Java - PullRequest
0 голосов
/ 14 марта 2012
Input array: [200, 8, 10, 60, 30, 80];
Output am getting: [200, 10, 60, 80, 30, 8]; 
Output required: [200, 60, 80, 8, 10, 30];

Цель : если элемент массива меньше 50, переместите его в нижнюю часть массива, но сохраняйте порядок массива (сдвигая влево перед вставкой элемента меньше 50 в нижнюю часть) , Пример как показано выше.

Проблемы
1. Несмотря на то, что 10 меньше 50, оно все еще не сдвинуто вниз.
2. 8 должно быть до 30, потому что он будет перемещен сначала вниз, а затем 30 будет перемещен. Но 8 в конце.

Мой код Java:

import java.util.*;
public class chapte1_17
{
  public static void main(String[] args)
  {
    int list[] = new int[] {200, 8, 10, 60, 30, 80};
    int length = list.length;
    int value = 50;
    int temp;
    //System.out.println(length);
    for ( int i = 0 ; i < list.length ; i++ )
    {
        if (list[i] <  value) {             
            int remIndex = i;
            temp = list[i];
            //System.out.println(remIndex);
            //System.out.println(temp);

            for ( int j = remIndex ; j < list.length - 1 ; j++ )
            {
                list[ j ] = list[ j + 1 ] ;

            }
            list[list.length -1] = temp;
        }

        System.out.println(list[i] + "");
    }
  }
}

Я новичок в сортировке и Java - любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Во-первых, ваш вывод неправильный, вы должны перебрать массив, когда закончится первый цикл for.

    for (int i = 0; i < list.length; i++) {
        //code
    }
    for (int i = 0; i < list.length; i++) {
        System.out.println(list[i] + "");
    }

Во-вторых, это логика перемещения, попробуйте что-то вроде этого:

int list[] = new int[] { 200, 8, 10, 60, 30, 80 };
    int length = list.length;
    int value = 50;
    int temp;
    int actual_i = 0;
    // System.out.println(length);
    for (int i = 0; i < list.length; i++) {
        if (list[i] < value && actual_i < list.length - 1) {

            int remIndex = i;
            temp = list[i];
            // System.out.println(remIndex);
            // System.out.println(temp);

            for (int j = remIndex; j < list.length - 1; j++) {
                list[j] = list[j + 1];

            }
            list[list.length - 1] = temp;
            i--;
        }
        actual_i++;

    }
    for (int i = 0; i < list.length; i++) {
        System.out.println(list[i] + "");
    }
0 голосов
/ 14 марта 2012

Следующее может быть немного проще:

    int list[] = new int[] {200, 8, 10, 60, 30, 80};
    List high = new ArrayList();
    List low = new ArrayList();

    for (int i = 0; i < list.length; i++) {
        int temp = list[i];
        if (temp >= 50) {
            high.add(temp);
        } else {
            low.add(temp);
        }
    }

    List test = new ArrayList();
    test.addAll(high);
    test.addAll(low);
    Object[] newList = test.toArray();

Вероятно, есть более простой способ работы с массивами, но это тот, который я мог бы себе представить, был самым простым =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...