Я не знаю, почему в моем массиве нет случайных значений, сохраненных в этой пузырьковой сортировке - PullRequest
0 голосов
/ 02 июля 2019

Я хотел сделать простое упражнение с пузырьковой сортировкой, но я не знаю, что мне следует изменить, чтобы сделать эту работу, а также не использовать метод рисования, который у меня есть. Вот мой код:

package sorting;

import java.awt.Graphics;
import javax.swing.JFrame;

public class Sorting extends JFrame{

    public int[] values = new int[800];

    public static void main(String[] args) {
        Sorting sort = new Sorting();
    }

    public Sorting(){
        setSize(800, 500);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
        setTitle("Sorting");
    }

    @Override
    public void paint(Graphics g){        
        for (int i = 0; i < 800; i++){
            values[i] = (int)(Math.random()*500);
            for (int k = 0; k < 800; k++){
                g.drawLine(k, 500, k, 500-values[k]);
            }
        }
        for (int j = 0; j < 800; j++){
            for (int a = 0; a < 800 - j - 1; a++){
                int r = values[j];
                int b = values[j + 1];
                if (a > b){
                    swap(values, j, j+1);
                }
            }
        }
    }

    private void swap(int[] arr, int a, int b) {
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }
}

Я предполагаю, что в моем массиве значений не сохранены значения, созданные в методе рисования, и поэтому метод обмена не работает, но я не уверен.

Это мой вывод

Ответы [ 3 ]

0 голосов
/ 02 июля 2019

Следующее исправлено для цикла. Вы используете неверный индекс, а также сравниваете неверные значения.

for (int j = 0; j < 800; j++){
    for (int a = 0; a < 800 - j - 1; a++){
        int r = values[a];
        int b = values[a + 1];
        if (r > b){
            swap(values, a, a+1);
        }
    }
}
0 голосов
/ 02 июля 2019

При пузырьковой сортировке вы будете проходить по всему массиву, и если в индексах i и i+1 есть пара из двух чисел, которые, кажется, не отсортированы, вы меняете значения в этих индексах и продолжаете так до конца вашего текущего цикла. Затем вы должны повторить цикл, потому что была обнаружена несортированная часть. Алгоритм заканчивается, когда вы перебираете все записи и не обнаруживаете изменений в массиве.

Я бы предложил использовать простую реализацию сортировки по buuble с циклом while и for:

boolean isSorted = false; // assume array is not sorted

while (!isSorted) {  //repeat until array is sorted

     isSorted = true;  // assume array is sorted

     for (int i = 0; i < values.length - 1; i++) { //loop through array
         int a = values[i];  //get first value to compare
         int b = values[i + 1];  // get second value to compare

         if (a < b) {  // if first value is less than second, swap them
             swap(values, i, i + 1);
             isSorted = false;  // there was a change so array is not actually sorted! So we will have to loop through whole array again
         }
     }
}
0 голосов
/ 02 июля 2019
if (a > b){
    swap(values, j, j+1);
}

Должно быть

if (r > b){
    swap(values, j, j+1);
}
...