快速排序

package com.ryan.demo1;

import java.lang.reflect.Array;

import javax.security.auth.kerberos.KerberosKey;

public class QuickSort {

    public static void main(String[] args) {
        int[] a= {5,2,6,0,3,9,1,7,4,8};
Qsort(a, 0, 9);
for (int i : a) {
    System.out.println(a[i]);
}
    }
    public static int partition(int[] a,int low,int high) {
        int M=low+(high-low)/2;  //優(yōu)化之一: 選取的基準(zhǔn)值要是首尾中三個(gè)值的中位數(shù)筐骇,所以要對數(shù)組中的三個(gè)值進(jìn)行比較
        if(a[low]>a[high])      //把首尾大的值換到最后面
        {swap(a,low,high);}
        if(a[M]>a[high])         //把中尾大的值換到最后面
        {swap(a,M,high);}
        if(a[low]<a[M])      //把首重大的值換到最前面
        {swap(a,M,low);}
        int point;        //把第一個(gè)值當(dāng)作 基準(zhǔn)值
        point=a[low];
        while(low<high) {
            while(low<high&&point<=a[high]) {  //把數(shù)組右邊比基準(zhǔn)值大的值過濾了
                high--;                         
            }
            /*swap(a, low, high);*/           //優(yōu)化之二:point值會(huì)頻繁交換移動(dòng),所以直接賦值枣购,將數(shù)組右邊大的值填給左邊小的數(shù)組
            a[low]=a[high];
            while(low<high&&a[low]<=point) {  //把數(shù)組右邊比基準(zhǔn)值大的值過濾了
                low++;
            }
            /*swap(a, low, high);*/
            a[high]=a[low];
        }
        a[low]=point;//補(bǔ)位,補(bǔ)最后那個(gè)空出來的位置
        return low;
    }
    public static void Qsort(int[] a,int low,int high) {
        int point;
        int length_insertsort=7;   //插入排序的長度
        if((high-low+1)>length_insertsort) {
     while(low<high)            
        {   point=partition(a,low,high);
            if(point-low<high-point)  //運(yùn)用尾遞歸称簿,即先對數(shù)組短的進(jìn)行遞歸精堕,如果結(jié)束了再對point賦值 跑到另一組數(shù)組進(jìn)行遞歸 
                { Qsort(a, low, point-1);
            
                       low=point+1;}   //執(zhí)行此語句時(shí),意味著前面一句的Qsort已經(jīng)因?yàn)閘ow等于high而終止瞧挤,所以此時(shí)point+1跳出當(dāng)前循環(huán),另一對數(shù)組開始執(zhí)行遞歸 
            
        else {  Qsort(a, point+1, high);
             high=point-1;
   
        }
    }}
else{
insertSort(a,low,high);
}
}
    public static void insertSort(int[] a,int low,int high) {
                int i,j;
        for(i=low+1;i<high;i++) {
              for(j=i;(j>low)&&a[j]<a[j-1];j--) {
                    swap(a,j,j-1);
                }
            
            }
        
    }
    public static void swap(int[] a,int low,int high) {
        int temp =a[high];
        a[high]=a[low];
        a[low]=temp;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末儡湾,一起剝皮案震驚了整個(gè)濱河市特恬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌徐钠,老刑警劉巖癌刽,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異尝丐,居然都是意外死亡显拜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門摊崭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讼油,“玉大人,你說我怎么就攤上這事呢簸。” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵根时,是天一觀的道長瘦赫。 經(jīng)常有香客問我,道長蛤迎,這世上最難降的妖魔是什么确虱? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮替裆,結(jié)果婚禮上校辩,老公的妹妹穿的比我還像新娘。我一直安慰自己辆童,他們只是感情好宜咒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著把鉴,像睡著了一般故黑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庭砍,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天场晶,我揣著相機(jī)與錄音,去河邊找鬼怠缸。 笑死诗轻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的揭北。 我是一名探鬼主播概耻,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼罐呼!你這毒婦竟也來了鞠柄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤嫉柴,失蹤者是張志新(化名)和其女友劉穎厌杜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體计螺,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡夯尽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了登馒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匙握。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖陈轿,靈堂內(nèi)的尸體忽然破棺而出圈纺,到底是詐尸還是另有隱情秦忿,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布蛾娶,位于F島的核電站灯谣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛔琅。R本人自食惡果不足惜胎许,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望罗售。 院中可真熱鬧辜窑,春花似錦、人聲如沸寨躁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朽缎。三九已至送淆,卻和暖如春振坚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工狞玛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呢铆,地道東北人水慨。 一個(gè)月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓湿颅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親床蜘。 傳聞我的和親對象是個(gè)殘疾皇子辙培,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 總結(jié)一下常見的排序算法。 排序分內(nèi)排序和外排序邢锯。內(nèi)排序:指在排序期間數(shù)據(jù)對象全部存放在內(nèi)存的排序扬蕊。外排序:指在排序...
    jiangliang閱讀 1,334評論 0 1
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序丹擎,而外部排序是因排序的數(shù)據(jù)很大尾抑,一次不能容納全部...
    蟻前閱讀 5,170評論 0 52
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個(gè)記錄插入到已排序好...
    依依玖玥閱讀 1,243評論 0 2
  • “噓~聽說,下雨天會(huì)有妖怪出沒哦~” 小羽毛盯著陰沉的天空蒂培,眼睛轉(zhuǎn)向大尾巴再愈,“你怎么知道會(huì)有妖怪,難倒你是妖怪护戳?”...
    奔跑在森林中的貓閱讀 212評論 0 0
  • 借鑒于[美團(tuán)點(diǎn)評技術(shù)團(tuán)隊(duì)][2][2]: http://tech.meituan.com/java-hashmap...
    xx1994閱讀 395評論 0 2