【问题标题】:Bubblesort Java, new to Java [duplicate]Bubblesort Java,Java新手[重复]
【发布时间】:2015-11-02 07:39:11
【问题描述】:
public class App {
    public static void main( String[] args ) {
        int[] set = {0,0,0,0,0,0,0};

        for(int i = 0; i < 7; i++) {
            boolean unique = false;
            while (!unique) {
                int j = 0;
                try {
                    j = JRandom.randInt(1, 45);
                }
                catch (ParamterException e) {
                    e.printStackTrace();
                }

                unique = true;
                for(int k = 0 ; k < 7; k++) {
                    if (j==set [k]) { 
                        unique = false;
                        break;
                    }
                }

                if (unique) {
                    set [i] = j;
                }
            }
        }


        for (int i= 0; i < 6; i++) {
            if (i == 5) {
                System.out.println(set[i]);
            }
            else {
                System.out.print(set[i]+", ");
            }
        }

        System.out.println("Bonus Ball = " + set[6]);
    }
}

我想知道如何在这段代码中实现冒泡排序。它可以在我的机器上运行并产生 6 个随机数 + 一个奖励球。

2, 34, 25, 14, 39, 13

Bonus Ball = 30

我的目标是让它打印出来,这样数字就会上升,这样它就会像乐透一样,无论如何都是这个想法。

就是这样,谢谢。

【问题讨论】:

  • 只要google一下,你会发现这个没有任何问题。

标签: java bubble-sort


【解决方案1】:
for (i = 0 ; i < set.length() -2; i ++){ 
   for(j = i+1 ; j< set.length()-1 ; j++){ 
   if(set[i]<set[j]){
     int dummy = set[i];
     set[i] = set[j];
     set[j] = dummy;
     }
   }
}

上面的冒泡排序只对生成的 6 个数字进行排序,您的红利球仍然存在于set[6]

所以现在休息是你的打印功能工作。

【讨论】:

  • 我需要把它放在代码的什么地方?谢谢! :)
  • 在你的最后一个 for 循环之前,它正在打印,所以现在你需要先对其进行排序,如果它适合你,也接受答案...... ;)
【解决方案2】:

冒泡排序集合数组:-

int temp = 0;
for(int i = 0;i<set.length-1;i++)
{
    for(int j = 0;j<set.length-1;j++)
    {
         if(set[j]>set[j+1])
         {
             temp = set[j];
             set[j] = set[j+1];
             set[j+1] = temp;
         }
    }
}
//Your set array is sorted using bubble sort at this point.

【讨论】:

    【解决方案3】:

    可以这样:

            for (int i = set.length-1; i >= 0; i --) {   
    
            for (int j = 0; j < i; j++) { 
    
                if (set[j] > set[j + 1]) {   
                     int aux = set[j];        
                     set[j] = set[j + 1];  
                     set[j + 1] = aux;        
                }           
            }       
        }
    

    以这种方式,初始循环也有帮助,不会浪费资源比较已排序的索引。

    如果不强制使用冒泡排序算法,只需使用前面提到的 Array.sort 方法即可。

    【讨论】:

    • 完美运行,感谢努诺!如果您能提供非常有用的帮助,您能否以通俗的方式说明它是如何工作的,谢谢。
    • 内部 for 循环是在 index[i] 和 index[i+1] 之间进行比较的循环,因此它开始在您的数组中进行比较,称为 set index set[0] 和 set[1 ],然后如果 set[1] 大于 set[0],他将 set[0] 值存储在辅助变量中,将 set[1] 值分配给 set[0] 并分配 set[0] 的前一个值被存储在 aux 到 set[1],然后他将在整个数组中执行此操作,每次将 set[i] 与 set[i+1] 进行比较,直到最大的数字存储在数组的最终索引处。
    • 一旦他这样做了,外部的for循环就会递减,所以程序不会浪费时间比较已经排序的值。然后它从增益开始,直到外循环索引为 [0]。抱歉,由于字母太多而不得不中断评论 2 :)
    • 谢谢,非常有帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多