快速排序

快速排序的示意圖

代碼:

package com.swun.AL;

import java.util.Arrays;

public class QuickSort {
    public static void main(String[] args) {
        int[] nums = {5, 1, 6, 3, 7, 2, 9, 4, 0, 8};
        quickSort(nums, 0, nums.length - 1);
        System.out.println(Arrays.toString(nums));
    }

    /**
     * 快排
     *
     * @param nums  目標排序數(shù)組
     * @param left  目標數(shù)組開始角標
     * @param right 目標數(shù)組最后的角標
     */
    private static void quickSort(int[] nums, int left, int right) {
        //角標未越界
        if (left < right) {
            //臨時角標
            int i = left, j = right;
            //臨時值
            int temp = nums[i];
            //當i < j 雷逆,一旦i == j是牢,退出循環(huán)
            while (i < j) {
                //先從右側(cè)開始比較,若當前最右側(cè)的值大于等于臨時值污淋,角標減1
                while (i < j && nums[j] >= temp) {
                    j--;
                }
                //左側(cè)開始比較,若當前最左側(cè)的值小于等于臨時值慨灭,角標加1
                while (i < j && nums[i] <= temp) {
                    i++;
                }
                //到了這一步坐昙,就說明右側(cè)找到了一個比臨時值小,而左側(cè)找到了一個比臨時大的值
                if (i < j) {
                    //進行交換,將大的值放在右邊台腥,小的值放在左面
                    swap(nums, i, j);
                }
            }
            //出了while循環(huán),說明i == j 绒北,因為i在++ 黎侈, j在--
            //將j位置上的值賦予最左側(cè)
            nums[left] = nums[j];
            //此時的臨時值,還是最左側(cè)的值闷游,將最左側(cè)的值賦予j位置峻汉,也就是說將基準值與相遇值進行交換
            //此時j左側(cè)都比j位置上的值小,而j右側(cè)都比j位置上的值大脐往,也就是中間值
            nums[j] = temp;
            //再對left到中間值角標的數(shù)組進行排序休吠,遞歸調(diào)用
            quickSort(nums, left, i - 1);
            //再對中間值角標到right的數(shù)組進行排序,遞歸調(diào)用
            quickSort(nums, i + 1, right);
        }
    }

    /**
     * 交換值
     */
    private static void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钙勃,一起剝皮案震驚了整個濱河市蛛碌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辖源,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件希太,死亡現(xiàn)場離奇詭異克饶,居然都是意外死亡,警方通過查閱死者的電腦和手機誊辉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門矾湃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人堕澄,你說我怎么就攤上這事邀跃。” “怎么了蛙紫?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵拍屑,是天一觀的道長。 經(jīng)常有香客問我坑傅,道長僵驰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮蒜茴,結(jié)果婚禮上星爪,老公的妹妹穿的比我還像新娘。我一直安慰自己粉私,他們只是感情好顽腾,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诺核,像睡著了一般抄肖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猪瞬,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天憎瘸,我揣著相機與錄音,去河邊找鬼陈瘦。 笑死幌甘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的痊项。 我是一名探鬼主播锅风,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鞍泉!你這毒婦竟也來了皱埠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤咖驮,失蹤者是張志新(化名)和其女友劉穎边器,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體托修,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡忘巧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了睦刃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砚嘴。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖涩拙,靈堂內(nèi)的尸體忽然破棺而出际长,到底是詐尸還是另有隱情,我是刑警寧澤兴泥,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布工育,位于F島的核電站,受9級特大地震影響郁轻,放射性物質(zhì)發(fā)生泄漏翅娶。R本人自食惡果不足惜文留,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望竭沫。 院中可真熱鬧燥翅,春花似錦、人聲如沸蜕提。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谎势。三九已至凛膏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脏榆,已是汗流浹背猖毫。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留须喂,地道東北人吁断。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像坞生,于是被迫代替她去往敵國和親仔役。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

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