java排序演算法(五):快速排序,java排序演算法

來源:互聯網
上載者:User

java排序演算法(五):快速排序,java排序演算法

java排序演算法(五):快速排序

  快速排序是一個速度非常快的交換排序演算法,它的基本思路很簡單,從待排的資料序列中任取一個資料(如第一個資料)作為分界值,所有比它小的元素放到左邊。所有比它大的元素放到右邊。經過這樣一趟下來,該序列形成左右兩個子序列,左邊序列中的資料元素的值都比分界值小,右邊序列中資料元素的值都比分界值大。接下來對左右兩個序列進行遞迴排序。對兩個子序列重新選擇中心元素並依此規則調整。直到每個元素子表的元素只剩下一個元素則排序成功

  思路

  1、定義一個變數 i變數從左邊第一個索引開始,找大於分界值的元素的索引,並用i來記錄它。

  2、定義一個j變數,j變數從右邊第一個索引開始,找小於分界值的元素的索引,並用j來記錄它。

  3、如果i < j,交換i、j兩個索引處的元素

  重複執行以上1、2、3步驟,直到i>=j,可以判斷j左邊的資料元素都小於分界值,j右邊的資料元素都大於分界值,最後將分界值j索引處的元素交換即可

  時間複雜度

  最好情況(每次總是選到中間值樞軸)Tn = o(nlogn)

  最壞情況:(每次總是選到最小或者最大元素作為樞軸)

  做n-1趟,每次比較n-i次。總的比較次數最大;[o(n2)]

  平均時間複雜度是T(n) = o(logn)

  代碼實現

  

package com.spring.test;import com.sun.org.apache.bcel.internal.generic.SWAP;import java.awt.print.PrinterGraphics;/** * 快速排序 */public class QuickSortTest {    public static void main(String[] args) {        int[] data = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };        print(data);        quickSort(data,0,data.length-1);        System.out.println("排序後的數組");        print(data);    }    /**     * 快速排序     * @param data     * @param start     * @param end     */    public static void quickSort(int[] data,int start,int end){        if(start >= end){            return;        }        //以起始索引為臨界點        int point = data[start];        int i = start + 1;        int j = end;        while(true){            while(i<end && data[i] < point){                i++;            }            while(i> start && data[j] > point){                j--;            }            if(i < j){                swap(data,i,j);            }else{                break;            }        }        //交換j和分界點的值        swap(data,start,j);        print(data);        //遞迴在子序列        quickSort(data,start,j-1);        quickSort(data,j+1,end);    }    /**     * 交換資料     */    public static void swap(int[] data,int i,int j){        if(i==j){            return;        }        data[i] = data[i]+data[j];        data[j] = data[i]-data[j];        data[i] = data[i]-data[j];    }    /**     * 列印輸出     */    public static void print(int[] data){        for(int i=0;i<data.length;i++){            System.out.print(data[i]+"\t");        }        System.out.println();    }}

 

運行結果

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.