冒泡排序不起作用

时间:2013-11-18 02:04:38

标签: java bubble-sort

package package13;

import java.util.Scanner;

public class Sorter {

    public static void main (String[] args) {


        int i,j;
        String select;

        int inputArray[]=new int[10];
        System.out.println("Enter 10 numbers:");
        Scanner scan = new Scanner (System.in);
        for (i=0;i<inputArray.length;i++) {
            inputArray[i]=scan.nextInt();
        }
        for (j=0;j<inputArray.length;j++) {
            System.out.print(" "+inputArray[j]);
        }
        System.out.println("\nHow would you like to sort these numbers?");
        System.out.println("Your choices are: Selection, Insertion, or Bubble");
        Scanner scanner = new Scanner (System.in);

        select = scanner.nextLine();
        String choice = select.toString();

        String answer=choice;

        //going to use a switch for this

        choices Choice = choices.valueOf(answer.toUpperCase());

        switch(Choice) {
        case SELECTION:
            System.out.println("Selection sort:");
            int min;

            for (int k=0; k < inputArray.length; k++) {
                min=k;
                for (int l=k +1;l<inputArray.length;l++) {
                    if (inputArray[l] < inputArray[min]) {
                        min=l;
                    }
                }
                if (min != k) {
                    final int temp = inputArray[k];
                    inputArray[k] = inputArray[min];
                    inputArray[min] = temp;
                }
                System.out.println(inputArray[k]);

            }
            break;
        case INSERTION:
            System.out.println("Insertion sort");
            int blue, temp;
            for (int red=1;red<inputArray.length;red++) {
                blue=red;
                temp=inputArray[red];
                while (blue!=0&&inputArray[blue-1]>temp) {
                    inputArray[blue]=inputArray[blue-1];
                    blue--;
                }
                inputArray[blue]=temp;
            }
            for (int green=0;green<inputArray.length;green++) {
                System.out.println(inputArray[green]);
            }
            break;
        case BUBBLE:
            System.out.println("Bubble sort");
            int cat, dog;
            boolean fixed=false;

            while (fixed==false) {
                fixed=true;

                for (dog=0;dog<inputArray.length;dog++) {
                    if (inputArray[dog] > inputArray[dog+1]) {
                        cat = inputArray[dog+1];
                        inputArray[dog+1]=inputArray[dog];
                        inputArray[dog]=cat;
                        fixed=false;
                    }
                }

            }

            for (int mouse=0;mouse<inputArray.length-1;mouse++) {
                System.out.println(inputArray[mouse]);
            }
            break;
        }

    }
    public enum choices {
        SELECTION,
        INSERTION,
        BUBBLE
    }

}

它应该要求用户使用数组输入十个数字。然后程序询问用户使用哪种排序算法对这些数字进行排序。最后,程序打印按用户选择的算法排序的数组。 我无法找出为什么泡沫排序不起作用 有什么帮助吗?

3 个答案:

答案 0 :(得分:1)

你需要将一些循环嵌套在一起。我会说你应该编写自己的代码。但谁真的关心泡沫排序。


冒泡排序说明

基本上,冒泡排序的工作原理是检查相邻的值(彼此相邻的值)并根据第一个值是否更大来交换它们。它不断地遍历列表(数组),直到一切都井然有序。


简单的嵌套循环

for(int i = 0; i < arrayInput.length; i++){
    for(int j = 0; j < arrayInput.length-1; j++){
        if(arrayInput[j] > arrayInput[j+1]){
            //swap values
        }
    }
}

一边做

boolean swapped = false;

do{
   swapped = false
   for(int j = 0; j < arrayInput.length-1; j++){
       if(arrayInput[j] > arrayInput[j+1]){
          //swap values
          swapped = true;
       }
   }
}while(swapped);

递归(刚刚提出这个:P)

Boolean swapped = true;
while(swapped){
    swapped = bubblehelper(arrayInput);
}

Boolean bubblehelper(int[] arrayInput){
      Boolean swapped = false;
      for(int j = 0; j < arrayInput.length-1; j++){
           if(arrayInput[j] > arrayInput[j+1]){
              //swap values
              swapped = true;
           }
       }
       return swapped;
}

希望这会有所帮助。

答案 1 :(得分:0)

冒泡排序有2个循环。你只有一个。

http://rosettacode.org/wiki/Sorting_algorithms/Bubble_sort

答案 2 :(得分:0)

来自维基百科。

boolean changed = false;
    do {
        changed = false;
        for (int a = 0; a < comparable.length - 1; a++) {
            if (comparable[a].compareTo(comparable[a + 1]) > 0) {
                E tmp = comparable[a];
                comparable[a] = comparable[a + 1];
                comparable[a + 1] = tmp;
                changed = true;
            }
        }
    } while (changed);

您的密码。

        boolean fixed=false;

        while (fixed==false) {
            fixed=true;

            for (dog=0;dog<inputArray.length;dog++) {
                if (inputArray[dog] > inputArray[dog+1]) {
                    cat = inputArray[dog+1];
                    inputArray[dog+1]=inputArray[dog];
                    inputArray[dog]=cat;
                    fixed=false;
                }
            }

        }

你能看出差异吗?