Java排序算法之——快速排序

算法簡述

所謂快速排序算法是基於交換排序和遞歸思想的,它的速度的確如名字所示——快!而且這種一算通常被用做數量級比較大的數據當中,在大數據中有着很重要的地位。算法

算法流程

下面是快速排序算法的流程:
一、首先設定一個分界值(通常都是取中間或者第一個數),經過該分界值將數組分紅左右兩部分; 二、將數組中大於等於分界值的數值放在分界值的右邊,將數組中小於等於分界值的數值放在分界值的左邊;
三、而後左右兩邊的數組又能夠按照這個方式進行獨立排序;
四、重複這個過程,能夠看出這是一種遞歸的思想,當遞歸到最後,整個數組也就排序完成;數組

實例講解

下面經過一個例子來說解一下:對數組int[] arr = {34,25,65,33,16,78,43,22}進行快速排序大數據

  1. 取33爲分界值,用i,j兩個引用從兩端進行遍歷,i從左邊依次遍歷直到找出比33大的數34(即arr[0]),j從右依次遍歷直至找到比33小的數22(即arr[7])交換這兩個數的位置:

{22,25,65,33,16,78,43,34}ui

  1. 而後i向右移,j向左移進行遍歷,通過一輪後:{22,25,16,33,65,78,43,34}
  2. 接下來經過遞歸調用,將左右數組進行排序。

代碼片斷

語言組織能力有限,直接上代碼:code

/**
     * 排序算法之快速排序
     * 參數arr爲須要排序的數組
     * 參數left爲數組的起始下角標即0
     * 參數right爲數組的最後下角標即arr.length-1
     */
    private void quickSort(int[] arr,int left,int right)
    {
        int f,t;
        int rtemp,ltemp;
        ltemp = left;
        rtemp = right;
        f = arr[(left+right)/2];
        //通過一輪排序,已經將數組分爲左右兩部分
        while(ltemp<rtemp)
        {
            while(arr[ltemp]<f)
            {
                ++ltemp;
            }
            while(arr[rtemp]>f)
            {
                --rtemp;
            }
            if(ltemp<=rtemp)
            {
                t = arr[ltemp];
                arr[ltemp] = arr[rtemp];
                arr[rtemp] = t;
                --rtemp;
                ++ltemp;
            }
        }
        if(ltemp == rtemp)
        {
            ltemp++;
        }
        //進行遞歸排序
        if(left<rtemp)
        {
            quickSort(arr,left,ltemp-1);
        }
        if(ltemp<right)
        {
            quickSort(arr,rtemp+1,right);
        }
    }

總結

快速排序的精髓在於分治思想,分而治之,它的時間複雜度爲O(nlog2n)。排序

相關文章
相關標籤/搜索