2013-11-18 5 views
0
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 
    } 

} 

Предполагается, что он попросит пользователя ввести десять чисел с использованием массивов. Затем программа запрашивает у пользователя, какой алгоритм сортировки будет использоваться для сортировки этих чисел. Наконец, программа печатает массив, отсортированный выбранным пользователем алгоритма. Я не могу понять, почему сортировка пузыря не работает любая помощь?Bubble sort не работает

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

Надеюсь, это поможет.

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

     } 

Вы видите разницу?