我已經在Java中創建了Bubble排序算法的實現。代碼運行良好,並提供有效的輸出,但是,由於某種原因,當我按升序對數據進行排序時,它正在正確地執行此操作,但當我嘗試打印語句時遇到問題。下面是我的代碼,以及對問題的更好描述!爲什麼當按升序排序數據時,我的氣泡排序會給出錯誤的輸出?
import java.util.Arrays;
import java.util.Scanner;
//import java.util.regex.Pattern;
//import java.util.stream.Stream;
public class BubbleSortNumeric {
public static void main (String [] args) {
Integer [] unsortedData = getDataInput();
Integer [] sortedDataAscending;
Integer [] sortedDataDescending;
long start = System.nanoTime();
sortedDataAscending = bubbleSortAscending(unsortedData);
sortedDataDescending = bubbleSortDescending(unsortedData);
long stop = System.nanoTime();
System.out.println("Ascending: " + Arrays.toString(sortedDataAscending));
System.out.println("Descening: " + Arrays.toString(sortedDataDescending));
System.out.println("Execution time: " + ((stop - start)/1e+6) + "ms.");
}
private static Integer [] getDataInput() {
System.out.println("Enter a set of integers seperated by a space.");
Integer [] userInput = {};
String strInput;
try(Scanner sc = new Scanner(System.in)) {
strInput = sc.nextLine();
}
String [] inputData = strInput.split("\\s+");
try {
userInput = Arrays.asList(inputData).stream().map(Integer::valueOf).toArray(Integer[]::new);
}catch(NumberFormatException e) {
System.out.println("ERROR. Invalid input.\n" + e.getMessage());
}
return userInput;
}
private static Integer [] bubbleSortAscending(Integer[] ascendingUnsorted) {
int n = ascendingUnsorted.length;
System.out.println(n);
if(n == 1) {
return ascendingUnsorted;
}
boolean swapped;
int temp;
do {
swapped = false;
for(int i = 1; i < n; i++) {
if(ascendingUnsorted[i - 1] > ascendingUnsorted[i]) {
temp = ascendingUnsorted[i - 1];
ascendingUnsorted[i - 1] = ascendingUnsorted[i];
ascendingUnsorted[i] = temp;
swapped = true;
}
}
n--;
}while(swapped == true);
return ascendingUnsorted;
}
private static Integer [] bubbleSortDescending(Integer [] descendingUnsorted) {
int n = descendingUnsorted.length;
if(n == 1) {
return descendingUnsorted;
}
boolean swapped;
int temp;
do {
swapped = false;
for(int i = 1; i < n; i++) {
if(descendingUnsorted[i - 1] < descendingUnsorted[i]) {
temp = descendingUnsorted[i];
descendingUnsorted[i] = descendingUnsorted[i - 1];
descendingUnsorted[i - 1] = temp;
swapped = true;
}
}
n--;
}while(swapped == true);
return descendingUnsorted;
}
}
當我打電話bubbleSortAscending
它工作正常,並以升序排序數據。因爲我正在計劃程序的執行時間,所以在按降序對數據進行排序之前,我不想打印出結果。
我的問題是,雖然這兩種方法都能正常工作,但在打印結果時出現問題。會發生什麼的一個例子是下面:
輸入
輸出:
升序:[193,40,9,3, 2,1]
下降:[193,40,9,3,2,1]
執行時間:0.527142ms。
如果我然而,移動打印語句只是行sortedDataAscending = bubbleSortAscending(unsortedData);
後,那麼它會給出正確的輸出,正如我已經說過,我不希望出現這種情況。
所以我的問題,即使我將結果分配給兩個不同的變量,爲什麼當我打印這兩個變量的答案時,輸出是相同的呢?
在你排序方法,您實際上對參數數組進行排序,因此您可以更改作爲參數提供的實際對象。 – AndrewMcCoist