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
}
}
它应该要求用户使用数组输入十个数字。然后程序询问用户使用哪种排序算法对这些数字进行排序。最后,程序打印按用户选择的算法排序的数组。 我无法找出为什么泡沫排序不起作用 有什么帮助吗?
答案 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个循环。你只有一个。
答案 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;
}
}
}
你能看出差异吗?