【知了堂學習筆記】java 編寫幾種常見排序演算法

來源:互聯網
上載者:User

標籤:lis   title   []   port   序列   根據   out   重複   oid   

排序的分類:

一.交換排序

所謂交換,就是根據序列中兩個記錄索引值的比較結果來對換這兩個記錄在序列中的位置,交換排序的特點是:將索引值較大的記錄向序列的尾部移動,索引值較小的記錄向序列的前部移動。

1.冒泡排序

演算法原理冒泡排序演算法的運作如下:
  1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
  3. 針對所有的元素重複以上的步驟,除了最後一個。
  4. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

java代碼的實現:

package Sort;import java.util.Scanner;public class BubbleSort {    /**     * 冒泡排序演算法的運作如下:        1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。        2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。        3.針對所有的元素重複以上的步驟,除了最後一個。        4.持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較.     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        int[] arr = {78,68,48,39,95,48,94,73};        for(int i=0;i<arr.length;i++){//實現多次全部交換            for(int j=0;j<arr.length-1;j++){//實現一次所有交換,且每次都將選出最大的數字放在最後                if(arr[j]>arr[j+1]){                    arr[j]=arr[j]^arr[j+1];                    arr[j+1]=arr[j]^arr[j+1];                    arr[j]=arr[j]^arr[j+1];                }            }            for(int m=0;m<arr.length;m++){//輸出每次交換後的數組                System.out.print(arr[m]+" ");            }            System.out.println();        }        for(int num:arr){//輸出最後一次交換完成的數組            System.out.print(num+" ");        }    }    }

2.快速排序:

演算法原理快速排序演算法的運作如下:

  快速排序(Quicksort)是對冒泡排序的一種改進。

1設定兩個變數i、j,排序開始的時候:i=0,j=arr.length-1;
 2以第一個數組元素作為關鍵資料,賦值給key,即key=A[0];
 3從j開始向前搜尋,即由後開始向前搜尋(j--),找到第一個小於key的值A[j],將A[j]和A[i]互換;
4從i開始向後搜尋,即由前開始向後搜尋(i++),找到第一個大於key的A[i],將A[i]和A[j]互換;
 5重複第3、4步,直到i<j不成立。

java代碼的實現:

package Sort;public class QuickSort {    /**     * 1)設定兩個變數i、j,排序開始的時候:i=0,j=arr.length-1;     * 2)以第一個數組元素作為關鍵資料,賦值給,temp即=A[0];     * 3)從j開始向前搜尋,即由後開始向前搜尋(j--),找到第一個小於key的值arr[j],將arr[j]和arr[i]互換;     * 4)從i開始向後搜尋,即由前開始向後搜尋(i++),找到第一個大於key的arr[i],將arr[i]和arr[j]互換;     * 5)重複第3、4步,直到i<j不成立。     *      * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        int[] arr = { 78, 68, 48, 39, 95, 48, 94, 73 };        sort(arr, 0, arr.length - 1);        for (int m = 0; m < arr.length; m++) {            System.out.print(arr[m]+" ");        }    }    public static void sort(int[] arr, int a, int b) {        int i=a,j=b;//將a,b的值賦給i,j目的是保留a,b。        int temp = arr[i];//擷取關鍵資料        while (i < j) {            while (i < j && arr[j] >= temp) {//當後面的數字比關鍵數字大的時候位置不交換,                                             //執行j--然後arr【j】前面的數字與temp比較                j--;            }            while (arr[j] < temp) {//當後面的數字比關鍵數字小的時候位置交換。                arr[i] = arr[j] ^ arr[i];                arr[j] = arr[j] ^ arr[i];                arr[i] = arr[j] ^ arr[i];            }            //當位置交換後比較的資料也從後到前,變為從前到後            while (i < j && arr[i] <= temp) {//當前面的數字比關鍵數字小的時候位置不交換,                                              //執行i++然後arr【i】後面的數字與temp比較                i++;            }            while (arr[i] > temp) {//當前面的數字比關鍵數字小的時候位置交換。                arr[j] = arr[j] ^ arr[i];                arr[i] = arr[j] ^ arr[i];                arr[j] = arr[j] ^ arr[i];            }        }        //第一輪選則出來後擷取到當前i的值由i出將數組分為兩段,前後各自重複執行sort()方法,直到i<j不成立。遞迴的調用        if (i > a) {//前面部分            sort(arr, a, i - 1);        }        if (j < b) {//後面部分            sort(arr, j + 1, b);        }    }}

未完待續.....  

http://www.zhiliaotang.com  請關注知了堂,在這裡將會有更多學習夥伴一起共同進步.。

【知了堂學習筆記】java 編寫幾種常見排序演算法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.