我上大学时遇到了这个泡泡糖,正在尝试运行它!应该按照大小从小到大的顺序对数字进行排序。任何帮助,将不胜感激。(它来自YouTube上的DerekBanas)。您知道为什么它不起作用吗?
public class ListForSorting { int arraySize = 10; int[] myArray = { 10, 12, 3, 4, 50, 60, 7, 81, 9, 100 }; public void printArray() { System.out.println("----------"); for (int i = 0; i < arraySize; i++) { System.out.print("| " + i + " | "); System.out.println(myArray[i] + " |"); System.out.println("----------"); } } public static void main(String[] args) { ListForSorting list = new ListForSorting(); list.printArray(); list.bubbleSort(); list.printArray(); } public void bubbleSort() { for (int i = arraySize - 1; i > 1; i--) { for (int j = 0; j < i; j++) { if (myArray[j] < myArray[j + 1]) swap(j, j + 1); } } } public void swap(int indexOne, int indexTwo) { int temp = myArray[indexOne]; myArray[indexOne] = myArray[indexTwo]; temp = myArray[indexTwo]; } }
输出:
---------- | 0 | 10 | ---------- | 1 | 12 | ---------- | 2 | 3 | ---------- | 3 | 4 | ---------- | 4 | 50 | ---------- | 5 | 60 | ---------- | 6 | 7 | ---------- | 7 | 81 | ---------- | 8 | 9 | ---------- | 9 | 100 | ---------- ---------- | 0 | 81 | ---------- | 1 | 100 | ---------- | 2 | 100 | ---------- | 3 | 100 | ---------- | 4 | 100 | ---------- | 5 | 100 | ---------- | 6 | 100 | ---------- | 7 | 100 | ---------- | 8 | 100 | ---------- | 9 | 100 |
谢谢!
您的swap功能有误。应该是这样的:
swap
public void swap(int indexOne, int indexTwo) { int temp = myArray[indexOne]; myArray[indexOne] = myArray[indexTwo]; myArray[indexTwo] = temp; }
另外,bubblesort功能有错误。Counter i应该下降到1not to 2,否则您的第一个元素将不会像应该的那样被排序:
bubblesort
i
1
2
public void bubbleSort() { for (int i = arraySize - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (myArray[j] < myArray[j + 1]) swap(j, j + 1); } } }
现在它输出:
---------- | 0 | 10 | ---------- | 1 | 12 | ---------- | 2 | 3 | ---------- | 3 | 4 | ---------- | 4 | 50 | ---------- | 5 | 60 | ---------- | 6 | 7 | ---------- | 7 | 81 | ---------- | 8 | 9 | ---------- | 9 | 100 | ---------- ---------- | 0 | 100 | ---------- | 1 | 81 | ---------- | 2 | 60 | ---------- | 3 | 50 | ---------- | 4 | 12 | ---------- | 5 | 10 | ---------- | 6 | 9 | ---------- | 7 | 7 | ---------- | 8 | 4 | ---------- | 9 | 3 | ----------
如果要从最小数到最大,只需更改功能if条件即可bubblesort:
if
public void bubbleSort() { for (int i = arraySize - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (myArray[j] > myArray[j + 1]) swap(j, j + 1); } } }
现在,输出为:
---------- | 0 | 10 | ---------- | 1 | 12 | ---------- | 2 | 3 | ---------- | 3 | 4 | ---------- | 4 | 50 | ---------- | 5 | 60 | ---------- | 6 | 7 | ---------- | 7 | 81 | ---------- | 8 | 9 | ---------- | 9 | 100 | ---------- ---------- | 0 | 3 | ---------- | 1 | 4 | ---------- | 2 | 7 | ---------- | 3 | 9 | ---------- | 4 | 10 | ---------- | 5 | 12 | ---------- | 6 | 50 | ---------- | 7 | 60 | ---------- | 8 | 81 | ---------- | 9 | 100 | ----------
编辑:性能
您可以通过“检查”内部循环是否至少进行了一次交换来加快此过程。如果不是这样,则意味着自从外部循环完成以来,您就可以存在它,并为其余的外部循环迭代节省时间。