2016-01-27 3 views
0

Я должен сделать список массивов для сортировки вставки, и мой учитель отправил мне это обратно и дал мне F, но говорит, что я могу сделать это до пятницы. Я не понимаю, почему это не сортировка A.L. Может кто-нибудь помочь мне исправить это, чтобы он соответствовал его критериям? Спасибо.ArrayLinkedList Вставка Сортировка

ОН СКАЗАЛ:

После проверки вашего первого вставки рода вы все сделали это неправильно. Я специально сказал, чтобы сдвинуть цифры и переместить номер в нужное место, а НЕ ОБНАРУЖИТЬ НОМЕР В МЕСТО. В задании в MySA я сказал, что если вы сделаете это, вы получите 0 для задания.

import java.util.ArrayList; 

public class AListINSSORT { 

    private static void insertionSort(ArrayList<Integer> arr) { 
      insertionSort(); 
    } 

    private static void insertionSort() { 
     ArrayList<Integer> swap = new ArrayList<Integer>(); 
     swap.add(1); 
     swap.add(2); 
     swap.add(3); 
     swap.add(4); 
     swap.add(5); 

     int prior = 0; 
     int latter = 0; 

     for (int i = 2; i <= latter; i++) 
     { 
      for (int k = i; k > prior && (swap.get(k - 1) < swap.get(k - 2)); k--) 
      { 
       Integer temp = swap.get(k - 2); 
       swap.set(k - 2, swap.get(k - 1)); 
       swap.set(k - 1, temp); 
      } 
     } 
     System.out.println(swap); 
    } 
} 
+1

Что такое точка метода 'insertionSort (ArrayList arr)', который полностью игнорирует его аргумент? – khelwood

+0

Он никогда не войдет в ваш цикл. – NickJ

ответ

2

Прежде всего, кажется, ваш учитель попросил вас использовать LinkedList вместо ArrayList. Между ними существует большая разница.

Во-вторых, и, возможно, больше. В вашем внутреннем цикле вы сохраняете временную переменную и меняете элементы в положениях k - 2 и k - 1 друг с другом. Из комментариев это не то, что ваш учитель намеревался. Поскольку он хочет, чтобы вы решили проблему с вставкой элемента, я рекомендую вам посмотреть следующее определение метода LinkedList.add (int i, E e): https://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html#add(int,%20E).

Это должно указывать на правильное направление.

1

Насколько я вижу, ваш код ничего не делает. условие внешнего контура для

for (int i = 2; i <= latter; i++) 

не выполняется.

Когда вы начинаете с i = 2 и как latter = 0, он никогда не держит i <= latter. Таким образом, вы никогда не запускаете внешний цикл и, наконец, просто возвращаете входные значения.

Если вы добавите входные значения в swap в другом порядке (еще не заказан), вы увидите, что ваш код не переупорядочивает их.

+0

Что касается «НЕ ПЕРЕДАЙТЕ НОМЕР В МЕСТО», я думаю, вы хотели сделать правильно. Ваши два для циклов выглядят так, как будто вы хотели вставить номер и не менять его. Возможно, ваш учитель был просто смущен именем «swap» из вашего списка. Итак, подумайте о просто переименовании. – JavAlex

0

Здесь много чего не так.

Во-первых, ваш метод:

private static void insertionSort(ArrayList<Integer> arr) { 
    insertionSort(); 
} 

принимает ArrayList и полностью игнорирует его. Предположительно это должно быть List, которое требует сортировки.

Затем в insertionSort() вы создаете новый ArrayList, вставляете некоторые цифры уже по порядку, а затем пытаетесь сделать что-то, что не похоже на сортировку вставки, но немного больше похоже на сортировку пузырьков.

Таким образом, когда вы позвоните в insertionSort(List), он фактически ничего не сделает со списком, все работы в insertionSort() произойдут совсем в другом List!

Поскольку на SO мы вообще не делать домашнюю работу людей для них, я предлагаю смотреть на красивый маленький анимированный diagram на this page

То, что вы должны иметь то что-то вроде:

public void insertionSort(LinkedList<Integer> numbers) { 

    //do stuff with numbers, using get() and add() 
} 
Смежные вопросы