Java-Как поменять 2 элемента массива и использовать toString для вывода каждого свопа shell-sort? - PullRequest
0 голосов
/ 26 июня 2018

Я все еще очень плохо знаком с Java, и это задание для школы, где я должен создать класс ShellSort и класс драйвера.Класс ShellSort должен создать и заполнить массив размером n и содержит метод сортировки оболочки, использующий следующий псевдокод:

pseudo-code

Этокод, который у меня пока есть:

import java.util.*;

public class ShellArray {
    int array[] = null;
    int size=0;
    Random random = new Random();
    int gap = 0;

    public ShellArray (int size) {
        this.size = size;

        array=new int[size];
        for (int i = 0; i<size; i++) {
            this.array[i]=random.nextInt(100);
        }


        System.out.println("Your array is: ");
        for(int i=0; i<size;i++) {
            System.out.print(" " +array[i] + " ");
        }
    }


public int[] shellSort(int size) {

        gap = size/2;

        do {
            boolean swapflag = true;
            do {
                swapflag = false;
                for (int s = 0; s<(size-gap);s++) {
                    if (array[s] > array[s+gap]) {

                        //swap array[s] with array[s+gap]

                        swapflag = true;

                        }
                    }
                }
            while (swapflag != false);
        }while (gap>0);

        gap = gap/2;
    }


    public String toString () {

         //to output array results of each swap
    }

}

Я заблудился относительно того, как поменять массив [s] с массивом [s + gap] и как использовать toString для вывода массива при каждом обмене.

Я пытался использовать переменную "temp" для помещения массива [s], чтобы я мог поместить массив [s + gap] в индекс массива [s], но я получил "ShellArray @ 7c53a9eb"ошибка?

Любая помощь будет высоко ценится!Спасибо.

1 Ответ

0 голосов
/ 26 июня 2018
  1. Чтобы напечатать массив, используйте System.out.println(Arrays.toString(array))
  2. Чтобы поменять элемент массива,

    if (array[s] > array[s + gap]) { int temp = array[s]; array[s] = array[s + gap]; array[s + gap] = temp; // swap array[s] with array[s+gap] swapflag = true; }

Кроме того, кажется, что gap = gap/2; должно быть внутри первого цикла do while.

...