快速排序

應(yīng)用場景
快速排序 主要是數(shù)據(jù)量大并且是線性結(jié)構(gòu)
短處
有大量重復數(shù)據(jù)的時候,性能不好
單向鏈式結(jié)構(gòu)處理性能不好(一般來說,鏈式都不使用)
思路int[] arr={31,68,45,90,23,39,54,12,87.76}
其實思想是蠻簡單的,就是通過第一遍的遍歷(讓low和high指針重合)來找到數(shù)組的切割點。
假設(shè)有
1、第一步:首先我們從數(shù)組的left位置取出該數(shù)(31)作為基準(base)參照物。


image.png

2、第二步:從數(shù)組的high位置向前找,一直找到比(base)小的數(shù),
如果找到,將此數(shù)賦給low位置(也就是將12賦給31),
此時數(shù)組為:12,68,45,90,23,39,54,12,87.76
low和high指針分別為前后的12。


image.png

3、第三步 此時low角標要向前移動一位 移動到68位置上,high不變
image.png

4、第四步 從數(shù)組的low位置向后找,一直找到比(base)大的數(shù),
如果找到,將此數(shù)賦給right的位置(也就是40賦給10),
此時數(shù)組為:12、68、45、90、23、39、54、68、87、76
low和hiigh指針分別為前后的68。
image.png

5、第五步 :重復“第二,第三 第四“步驟,直到low和high指針重合,
最后low和high角標在45位置上重合
此時的數(shù)組為:12、23、45、90、45、39、54、68、87、76


image.png

6、基準(base)參照物值賦值給low和high重合的位置上


image.png

7、第七步、此時31已經(jīng)潛入到數(shù)組的內(nèi)部,20的左側(cè)一組數(shù)都比31小,31的右側(cè)作為一組數(shù)都比31大,
以31為切入點對左右兩邊數(shù)按照"第一,第二,第三,第四,第五,第六"步驟進行。就可以把整個數(shù)據(jù)給排序完成。

代碼如下

    //快速排序     31  21  59  68  12  40
        //    x=31
        public static void quickSort(int[] array,int begin,int end){
            if(end-begin<=0) return;
            int x=array[begin];
            int low=begin;//0
            int high=end;//5
            //由于會從兩頭取數(shù)據(jù),需要一個方向
            boolean direction=true;
            L1:
            while(low<high){
                if(direction){//從右往左找
                    for(int i=high;i>low;i--){
                        if(array[i]<=x){
                            array[low++]=array[i];
                            high=i;
                            direction=!direction;
                            continue L1;
                        }
                    }
                    high=low;//如果上面的if從未進入,讓兩個指針重合
                }else{
                    for(int i=low;i<high;i++){
                        if(array[i]>=x){
                            array[high--]=array[i];
                            low=i;
                            direction=!direction;
                            continue L1;
                        }
                    }
                    low=high;
                }
            }
            //把最后找到的值 放入中間位置
            array[low]=x;
            //開始完成左右兩邊的操作
            quickSort(array,begin,low-1);
            quickSort(array,low+1,end);
        }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容