高級(jí)排序算法之快速排序

排序原理:观谦。

①選定一個(gè)值作為分界值顷窒,將元素分為大于分界值和小于分界值兩部分谢床。
②小于分界值數(shù)據(jù)放在分界值左邊性含,大于分界值數(shù)據(jù)放在分界值右邊擂达。
③將分界值兩邊的數(shù)據(jù)重復(fù)尋找分界值分組,直到每組只有兩個(gè)數(shù)據(jù)并排序胶滋。

切分原理;

①選定一個(gè)基準(zhǔn)值板鬓,用兩個(gè)指針?lè)謩e指向數(shù)組的首部和尾部。
②先從尾部到頭部搜索一個(gè)比基準(zhǔn)值小的數(shù)值究恤,搜索到即停止俭令,并記錄其索引。
③再?gòu)氖撞康轿膊克阉饕粋€(gè)比基準(zhǔn)值大的數(shù)值部宿,搜索到即停止抄腔,并記錄其索引。
④交換兩個(gè)指針的元素理张。
⑤重復(fù)搜索赫蛇,直到左指針的索引大于等于右指針的索引。

時(shí)間復(fù)雜度:

最好情況:O(nlogn)
最壞情況:O(n^2)
平均情況:O(nlogn)

空間復(fù)雜度:

O(nlogn)

穩(wěn)定性:

不穩(wěn)定

實(shí)現(xiàn):

API設(shè)計(jì):

①主排序算法用于排序
public static void sort(int[] a)
②對(duì)數(shù)組從low到high位置的元素進(jìn)行排序
private static void localSort(int[] a雾叭,int low,int high)
③對(duì)數(shù)組中從索引low到high處的元素按界限值進(jìn)行分組悟耘,并返回界限值的索引。
public static int partition(int[] a,int low,int high)
④ 比較API织狐,用于比較兩個(gè)元素大小
private static boolean greater(int[] a,int v,int w)
⑤交換API暂幼,用于交換兩個(gè)索引位置的值
private static void exchange(int[] a,int i,int j)

API實(shí)現(xiàn):

//主排序算法用于排序
       public static void sort(int[] a) {
           int low = 0;
           int high = a.length - 1;
           localSort(a,low,high);
       }
    //對(duì)數(shù)組從low到high位置的元素進(jìn)行排序
       private static void localSort(int[] a,int low,int high){
           if(low >= high) {
               return;
           }
           int partition = partition(a,low,high);
           //分別讓左右分組進(jìn)行分組有序
           localSort(a,low,partition-1);
           localSort(a,partition+1,high);
           
       }
    //對(duì)數(shù)組中從索引low到high處的元素按界限值進(jìn)行分組筏勒,并返回界限值位置變換后的索引。
    public static int partition(int[] a,int low,int high) {
        //1.確定分界值
        int key = a[low];
        //2.設(shè)置兩個(gè)指針?lè)謩e指向第一個(gè)元素和最后一個(gè)元素的下一位置
        int left = low;
        int right = high +1;
        
        //切分
        while(true) {
            //先從右向左移動(dòng)right指針找到一個(gè)比key小的數(shù)值
            while(!greater(a,--right,key)) {
                if(right == low) break;
            }
            //再?gòu)淖笙蛴乙苿?dòng)left指針找到一個(gè)比key大的數(shù)值
            while(!greater(a,++left,key)) {
                if(left == high) break;
            }
            if(left >= right){
                break;
            }else {
                exchange(a,left,right);
            }
        }
        //交換分界值位置
        exchange(a,low,right);
        return right;
        
    }
    
     //比較API旺嬉,用于比較兩個(gè)元素大小
       private static boolean greater(int[] a,int v,int w) {
           if(a[v]>a[w]) {
               return true;
           }
           return false;
           
       }
       //交換API管行,用于交換兩個(gè)索引位置的值
       private static void exchange(int[] a,int i,int j) {
           int temp = a[i];
           a[i] = a[j];
           a[j] = temp;
           
       }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市邪媳,隨后出現(xiàn)的幾起案子捐顷,更是在濱河造成了極大的恐慌,老刑警劉巖雨效,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件套菜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡设易,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門蛹头,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)顿肺,“玉大人,你說(shuō)我怎么就攤上這事渣蜗⊥雷穑” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵耕拷,是天一觀的道長(zhǎng)讼昆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)骚烧,這世上最難降的妖魔是什么浸赫? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮赃绊,結(jié)果婚禮上既峡,老公的妹妹穿的比我還像新娘。我一直安慰自己碧查,他們只是感情好运敢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著忠售,像睡著了一般传惠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上稻扬,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天卦方,我揣著相機(jī)與錄音,去河邊找鬼泰佳。 笑死愿汰,一個(gè)胖子當(dāng)著我的面吹牛困后,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播衬廷,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼摇予,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了吗跋?” 一聲冷哼從身側(cè)響起侧戴,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎跌宛,沒(méi)想到半個(gè)月后酗宋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疆拘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年蜕猫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哎迄。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡回右,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出漱挚,到底是詐尸還是另有隱情翔烁,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布旨涝,位于F島的核電站蹬屹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏白华。R本人自食惡果不足惜慨默,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弧腥。 院中可真熱鬧业筏,春花似錦、人聲如沸鸟赫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抛蚤。三九已至台谢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岁经,已是汗流浹背朋沮。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人樊拓。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓纠亚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親筋夏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒂胞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354