带输出的冒泡排序



所以我已经编辑了一些,我几乎完全得到了我想要的。现在唯一的问题是,我得到了一行我不想要的输出。我觉得解决这个问题很简单,但是我的脑子现在快炸了。

static void bubbleSort(int[] myArray) {
int n = myArray.length;
int temp = 0;
int counter = 0;
for (int i = 0; i < n; i++) {
int k;
for (k = 0; k < n; k++) {
System.out.print(myArray[k] + "|");
}
System.out.println(" Num swaps: " + counter);
for (int j = 1; j < (n - i); j++) {
if (myArray[j - 1] > myArray[j]) {
//swap elements
temp = myArray[j - 1];
myArray[j - 1] = myArray[j];
myArray[j] = temp;
counter++;
}
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] myArray = new int[10];
for (int i = 0; i < 10; i++) {
System.out.print("Enter slot " + i + ": ");
myArray[i] = sc.nextInt();
}
bubbleSort(myArray);
}

下面是我得到的一个例子:

Enter slot 0: 10
Enter slot 1: 9
Enter slot 2: 8
Enter slot 3: 7
Enter slot 4: 6
Enter slot 5: 5
Enter slot 6: 4
Enter slot 7: 3
Enter slot 8: 2
Enter slot 9: 1
10|9|8|7|6|5|4|3|2|1| Num swaps: 0
9|8|7|6|5|4|3|2|1|10| Num swaps: 9
8|7|6|5|4|3|2|1|9|10| Num swaps: 17
7|6|5|4|3|2|1|8|9|10| Num swaps: 24
6|5|4|3|2|1|7|8|9|10| Num swaps: 30
5|4|3|2|1|6|7|8|9|10| Num swaps: 35
4|3|2|1|5|6|7|8|9|10| Num swaps: 39
3|2|1|4|5|6|7|8|9|10| Num swaps: 42
2|1|3|4|5|6|7|8|9|10| Num swaps: 44
1|2|3|4|5|6|7|8|9|10| Num swaps: 45

第一行输出只是重复用户输入并表示0交换。我不想那样。

刚刚改变了for循环的位置。希望这是你真正想要的输出:).

static void bubbleSort(int[] myArray) {
int n = myArray.length;
int temp = 0;
int counter = 0;
for (int i = 0; i < n; i++) {
for (int j = 1; j < (n - i); j++) {
if (myArray[j - 1] > myArray[j]) {
// swap elements
temp = myArray[j - 1];
myArray[j - 1] = myArray[j];
myArray[j] = temp;
counter++;
}
}
int k;
for (k = 0; k < n; k++) {
System.out.print(myArray[k] + "|");
}
System.out.println(" Num swaps: " + counter);
}
}

使用两个嵌套流的算法:冒泡排序,逐步输出Java 8


分步输出的冒泡排序

外层的do-while-loop循环重复,直到数组被排序,而内部的for-loop遍历数组,交换相邻的无序元素。输出是在内循环中交换的元素,按传递在外循环中的分组。

public static void main(String[] args) {
int[] arr = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
bubbleSort(arr);
}
public static void bubbleSort(int[] arr) {
// counters
int passes = 0, swaps = 0;
// marker
boolean swapped;
// repeat the passes through the array until
// all the elements are in the correct order
do {
// output the beginning of the pass and increase the counter of passes
System.out.print((passes == 0 ? "<pre>" : "<br>") + "Pass: " + passes++);
swapped = false;
// pass through the array and
// compare adjacent elements
for (int i = 0; i < arr.length - 1; i++) {
// if this element is greater than
// the next one, then swap them
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
swapped = true;
// output the array and increase the counter of swaps
System.out.print(outputSwapped(arr, i, i + 1, swaps++));
}
}
// if there are no swapped elements at the
// current pass, then this is the last pass
} while (swapped);
// output total
System.out.print("<br>Total: Passes=" + passes);
System.out.println(", swaps=" + swaps + "</pre>");
}
static String outputSwapped(int[] arr, int e1, int e2, int counter) {
StringBuilder sb = new StringBuilder("<br>");
for (int i = 0; i < arr.length; i++) {
if (i == e1 || i == e2) {
// swapped elements are in bold
sb.append("<b>").append(arr[i]).append("</b>");
} else {
// other elements
sb.append(arr[i]);
}
sb.append(" ");
}
return sb.append("| ").append(counter).toString();
}

输出:

<>之前通过:0
910 8 7 6 5 4 3 2 1 | 0
98107 6 5 4 3 2 1 | 1
9 8 710 6 5 4 3 2 1 | 2
9 8 7610 5 4 3 2 1 | 3
9 8 7 65104 3 2 1 | 4
9 8 7 6 5 4103 2 1 | 5
9 8 7 6 5 43102 1 | 6
9 8 7 6 5 4 3 2101 | 7
9 8 7 6 5 4 3 2 110| 8
通过:1
897 6 5 4 3 2 1 10 | 9
8796 5 4 3 2 1 10 |
8 765 4 3 2 1 9 8 10 | 11
7 654 3 2 1 9 8 10 | 12
7 6 5 43 2 1 9 10 | 13
8 7 6 5 432 1 9 8 10 | 14
7 6 5 4 3 21 9 10 | 15
8 7 6 5 4 3 2 110 | 16 9
通过:2
786 5 4 3 2 1 9 10 | 17
765 4 3 2 1 8 9 10 | 18
7 654 3 2 1 9 8 10 | 19
7 6 5 43 2 1 8 9 10 | 20
7 6 5 432 1 9 8 10 | 21
7 6 5 4 3 21 8 9 10 | 22
7 6 5 4 3 2 18 9 10 | 23
通过:3
675 4 3 2 1 8 9 10 | 24
6574 3 2 1 8 9 10 | 25
6 5 473 2 1 8 9 10 | 26
6 5 4372 1 8 9 10 | 27
6 5 4 3 21 7 8 9 10 | 28
6 5 4 3 2 17 8 9 10 | 29日
通过:4
54 3 2 1 6 7 8 9 10 | 30
543 2 1 6 7 8 9 10 | 31
5 432 6 1 7 8 9 10 | 32
5 4 3 21 6 7 8 9 10 | 33
5 4 3 2 16 7 8 9 10 | 34
通过:5
453 2 1 6 7 8 9 10 | 35
432 5 6 7 8 9 10 1 | 36 4
321 5 6 7 8 9 10 | 37
4 3 2 15 6 7 8 9 10 | 38
通过:6
32 4 1 5 6 7 8 9 10 | 39
321 4 5 6 7 8 9 10 | 40 2
314 5 6 7 8 9 10 | 41
通过:7
231 4 5 6 7 8 9 10 | 42
2134 5 6 7 8 9 10 | 43
通过:8
12 3 4 5 6 7 8 9 10 | 44
通过:9
总:pass =10, swap =45

参见:冒泡排序输出不正确

最新更新