【问题标题】:I don't know why my array doesn't have its random values saved in this bubble sort我不知道为什么我的数组没有在这个冒泡排序中保存它的随机值
【发布时间】:2019-07-02 16:15:08
【问题描述】:

我想做一个简单的冒泡排序练习,但我不知道我应该改变什么才能完成这项工作,但也不知道我所拥有的绘图方法。这是我的代码:

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;
    }
}

我的猜测是我的 values 数组没有保存在绘制方法中创建的值,这就是交换方法不起作用但我不确定的原因。

This is my output

【问题讨论】:

  • “不工作”并没有真正描述问题。这具体如何失败?考虑这是一个熟悉调试器使用的机会。使用调试器,您可以在代码执行时逐行单步执行代码,并观察运行时行为和变量值的变化。执行此操作时,您首先在哪里观察到操作的意外结果?
  • 很抱歉我不够具体。在这个阶段,我相信程序应该向我展示从最短到最长的排序,同时它仍然向我展示随机行。我不知道该怎么做才能修复它

标签: java bubble-sort


【解决方案1】:

在冒泡排序中,您将遍历整个数组,并且如果索引 ii+1 处有一对两个数字似乎没有排序,则交换这些索引处的值并继续进行直到当前循环结束。然后您必须再次循环,因为检测到未排序的部分。当您遍历所有条目并且您检测到数组没有变化时,算法结束。

我建议使用带有whilefor 循环的简单buuble 排序实现:

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
         }
     }
}

【讨论】:

  • 非常感谢,你很有帮助
【解决方案2】:
if (a > b){
    swap(values, j, j+1);
}

应该是

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

【讨论】:

    【解决方案3】:

    以下是固定的 for 循环。您使用了不正确的索引,并且比较了不正确的值。

    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);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 2019-12-29
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多