Сортировка и выборка вставок общего назначения Java в Arraylist - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь реализовать сортировку вставками, и она работает для одной странной реализации, но в обратном порядке. То же самое касается другого выбора, который я пробовал, но он работает так же.

void insertionSort(ArrayList<T> genericAList) {
        for (int n = 1; n < genericAList.size(); n++) {// go from start to end
            // n=genericList.size
            //n is primary index, j is secondary ind
            for (int j = 0; j < n; j++) { // This sorts in descending order
//WHY DOES THIS NOT WORK?? for (int j = n-1; j>0; j--) {
                if (genericAList.get(n).compareTo(genericAList.get(j)) == 1) {
                    T ncopy = genericAList.get(n);
                    genericAList.set(n, genericAList.get(j));
                    genericAList.set(j, ncopy);
                }
            }

//unsuccessfully trying to copy the array to reverse the order
                ArrayList<T> copy = new ArrayList<>();
                for (int i = genericAList.size() - 1; i >= 0; i--) { // start from end of old
                    copy.add(genericAList.get(i));
                }
    //            genericAList=copy;
            }
    //        return clone();
        }

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Цикл for должен быть int j = n; j > 0; j--, == 1 должен быть > 0, и вы сравниваете / меняете элемент на n, когда он должен быть j - 1.

0 голосов
/ 28 октября 2019

Обратите внимание, что CompareTo не гарантирует возврата -1 или 1 для большего или меньшего значения.

Возвращает 0, если они одинаковые, и затем число, большее или меньшее 0, если они разные.

Представьте себе псевдокод для примитивной формы этого - например, если мы сравниваем два числа, мы можем сделать это:

 public int compareTwoNumbers(x, y) {
     return x - y;
 }

Таким образом, сравнение 5 и 3 даст вам -2или 2 (например, в зависимости от того, где они находятся).

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