BubbleSort и выбор сортировки - PullRequest
0 голосов
/ 03 марта 2020

Итак, я пытаюсь создать Bubble and Selection sort, и этот код у меня есть.

package club.westcs.javabasics;

import java.util.ArrayList;
import java.util.Collections;

public class SortsRunner {

        public static void BubbleSort(ArrayList<Integer> nums) {
            int n = nums.size();
            for (int i = 0; i < n; i++) {
                boolean swapped = false;
                for (int j = 0; j < n-1; j++) {
                    if (nums.get(j) > nums.get(j + 1)) {
                        int temp = nums.get(j);
                        nums.set(j, nums.get(j + 1));
                        nums.set(j + 1, temp);
                        swapped = true;
                    }
                }
                if (!swapped) {
                    break;
                }
            }
        }
        public static void SelectionSort(ArrayList<Integer> nums) {
            int n = nums.size();              
            for (int i = 0; i < n-1; i++) 
            { 
                int min_idx = i; 
                for (int j = i+1; j < n; j++) 
                    if (nums.get(j) < nums.get(min_idx)) 
                        min_idx = j; 

                int temp = nums.get(min_idx); 
                nums.set(j, nums.get(j+1)) = nums.set(i); 
                nums.set(i, min_idx) = temp; 
            } 
            }
        public static void printArrayList(ArrayList<Integer> nums) {
            for(int i = 0; i < nums.size(); i++) {
                System.out.println(nums.get(i) + " ");
                }
            System.out.println();
            }
        public static ArrayList<Integer> makeRandomArrayList() {
            ArrayList<Integer> nums = new ArrayList<>();
            for(int i = 0; i < (int)(Math.random() * 11) + 5; i++) {
                nums.add((int)(Math.random() * 100));
                }
            return nums;
            }

    public static void main(String[] args) {
    printArrayList(makeRandomArrayList());

    }

}

Мой выбор сортировки содержит ошибки для nums.set(j, nums.get(j+1)) = nums.set(i); и nums.set(i, min_idx) = temp; Я хочу эту часть кода, чтобы поменять местами минимальный элемент с первым элементом. Я не уверен, как сделать это правильно с материалом ArrayList. Может кто-нибудь дать мне несколько советов?

1 Ответ

0 голосов
/ 03 марта 2020

Вы получаете ошибку компиляции, потому что невозможно использовать оператор '=' для void функций (таких как nums.set(j, nums.get(j+1))). Сеттеры всегда недействительны, и вы ничего не можете назначить! Подпись установщика ArrayList выглядит следующим образом:

public E set(int index, E element)

, где первый параметр - это индекс массива (0, 2, 3 ... N), второй - это значение, которое вы хотите установить под этим индексом.

Кстати, ваш выбор сортировки выглядит странно. Попробуйте этот код:

public static void doSelectionSort(ArrayList<Integer> arr) {
        for (int i = 0; i < arr.size(); i++) {
            // find position of smallest num between (i + 1)th element and last element
            int pos = i;
            for (int j = i; j < arr.size(); j++) {
                if (arr.get(j) < arr.get(pos))
                    pos = j;
            }
            // Swap min (smallest num) to current position on array
            int min = arr.get(pos);
            arr.set(pos, arr.get(i));
            arr.set(i, min);
            printOut(i + 1, arr);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...