簡體   English   中英

使用 ArrayList 的冒泡排序有什么問題?

[英]What is wrong in my bubble sort using ArrayList?

我在 ArrayList 中的冒泡排序有什么問題? 它沒有排序。 我是初學者。

public static ArrayList < Integer > bubbleSort(ArrayList < Integer > ar) {

    for (int i = 0; i < ar.size() - 1; i++) {
        int indexMax = i;
        for (int j = 1; j < ar.size(); j++) {
            if (ar.get(indexMax) > ar.get(j)) {
                indexMax = j;
            }
        }
        if (indexMax != i) {
            int temp = ar.get(i);
            ar.set(i, ar.get(indexMax));
            ar.set(indexMax, temp);
        }
    }
    return ar;

}

您確定每次都應該從第二個元素(j=1)開始嗎? 試試j=i IE,

public static ArrayList<Integer> bubbleSort (ArrayList<Integer> ar) {
    for (int i = 0; i < ar.size() - 1; i++) {
        int indexMax = i;            
        for (int j = i; j < ar.size(); j++) {
            if (ar.get(indexMax) > ar.get(j)) {
                indexMax = j;
            }
        }
        if (indexMax != i) {
            int temp = ar.get(i);
            ar.set(i, ar.get(indexMax));
            ar.set(indexMax, temp);
        }
    }
    return ar;
}

PS 這將按升序對您的數組進行排序。

您的交換代碼塊看起來像是在循環之外,因此只有一次交換發生在主循環的一次迭代中。 您還在對元素進行不必要的比較,以前提條件j = 1開始您的內部循環。 您應該從i開始它,因為在從 0 到i的外循環范圍的一些迭代之后,將已經排序。

我認為您可以使用更簡單的方法。

for (int i = 0; i < ar.size() - 1; i++) {
    for (int j = i; j < ar.size(); j++) {
        if (ar.get(j) < ar.get(i)) {
            Integer temp = ar.get(j);
            ar.set(j, ar.get(i));
            ar.set(i, temp);       
        }
    }
}

如您所見,交換發生在內部循環內部,並且還會跳過集合中已經排序的部分。

你可以這樣排序:

for(int out=inputArray.size()-1; out>0; out--){
    for(int j=1; j<=out; j++){
      if(inputArray[j-1]<inputArray[j]){
         //Swap the elements
         int temp = inputArray[j];
         inputArray[j]=inputArray[j-1];
         inputArray[j-1]=temp;
       }
     }
 }
return inputArray;

你可以試試嗎?

int n = arr.length; 
    for (int i = 0; i < n-1; i++) 
        for (int j = 0; j < n-i-1; j++) 
            if (arr[j] > arr[j+1]) 
            { 
                // swap arr[j+1] and arr[i] 
                int temp = arr[j]; 
                arr[j] = arr[j+1]; 
                arr[j+1] = temp; 
            } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM