java 快速排序,冒泡排序

快速排序:網上說是冒泡排序的一種改進。

思路:比如要排序的是 String[] strVoid = new String[] { "11", "66", "0", "55", "22"};

1找到一個比較點 這裏選擇中間的數 0,然後找到這個數左邊的比這個數大的數,在找的這個數右邊的比這個數小的數,然後對找到的兩個數互換位置,

接下來使用左邊數中的下一個數,【即下標加1】,使用右邊數中的下一個數,【即下標減1】,如果左邊數的下標小於等於右邊數的下標,則繼續執行剛纔的比較【即上面1】, 如果左邊數的下標不小於等於右邊數的下標,把左邊數的下標作爲下一次遞歸的開始值的下標,再次執行遞歸,

切記:遞歸的特點,遞歸結束後,要一層一層出來,要執行開始遞歸時沒有執行的代碼。

參考代碼:如下代碼 來源於 :轉載!!!

    public class QuickSort {  
        /**
         * 快速排序
         *  
         * @param strDate
         * @param left
         * @param right
         */  
        public void quickSort(String[] strDate, int left, int right) {  
            String middle, tempDate;  
            int i, j;  
            i = left;  
            j = right;  
            middle = strDate[(i + j) / 2];  
            do {  
                while (strDate[i].compareTo(middle) < 0 && i < right)  
                    i++; // 找出左邊比中間值大的數  
                while (strDate[j].compareTo(middle) > 0 && j > left)  
                    j--; // 找出右邊比中間值小的數  
                if (i <= j) { // 將左邊大的數和右邊小的數進行替換  
                    tempDate = strDate[i];  
                    strDate[i] = strDate[j];  
                    strDate[j] = tempDate;  
                    i++;  
                    j--;  
                }  
            } while (i <= j); // 當兩者交錯時停止  
      
            if (i < right) {  
                quickSort(strDate, i, right);// 從  
            }  
            //如下if條件代碼可能是上面 i<right條件中執行遞歸時沒有執行到的代碼,在遞歸結束後依舊要由內向外完成執行,執行次數是遞歸的次數  
            if (j > left) {  
                quickSort(strDate, left, j);  
            }  
        }  
        public static void main(String[] args) {  
            String[] strVoid = new String[] { "11", "66", "0", "55", "22"};  
            QuickSort sort = new QuickSort();  
            sort.quickSort(strVoid, 0, strVoid.length - 1);  
            for (int i = 0; i < strVoid.length; i++) {  
                System.out.println(strVoid[i] + " ");  
            }  
        }  
    }  

冒泡排序:顧名思義,一連串泡泡往外冒,最後小泡泡把大泡泡頂上來了,最大的到了最上面,在冒一次,第二大的泡泡又被頂上來了,依次進行。

 【轉載】冒泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。在第二趟:仍從第一對數開始比較(因爲可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前,大數放後,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。如此下去,重複以上過程,直至最終完成排序。由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上升,所以稱作冒泡排序。

參考代碼:如下代碼 來源於 :轉載!!!

public class BubbleSort{
     public static void main(String[] args){
         int score[] = {67, 69, 75, 87, 89, 90, 99, 100};
         for (int i = 0; i < score.length -1; i++){    //最多做n-1趟排序
             for(int j = 0 ;j < score.length - i - 1; j++){    //對當前無序區間score[0......length-i-1]進行排序(j的範圍很關鍵,這個範圍是在逐步縮小的)
                 if(score[j] < score[j + 1]){    //把小的值交換到後面
                     int temp = score[j];
                     score[j] = score[j + 1];
                     score[j + 1] = temp;
                 }
             }            
             System.out.print("第" + (i + 1) + "次排序結果:");
             for(int a = 0; a < score.length; a++){
                 System.out.print(score[a] + "\t");
             }
             System.out.println("");
         }
             System.out.print("最終排序結果:");
             for(int a = 0; a < score.length; a++){
                 System.out.print(score[a] + "\t");
        }
     }
 }

轉自http://blog.csdn.net/mycup163/article/details/7053693
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章