不穩(wěn)定排序-快速排序

快速排序是對(duì)冒泡排序的一種改進(jìn),他的基本思想是:通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分料仗,其中的一部分的所有數(shù)據(jù)都比另一個(gè)部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分分別進(jìn)行快速排序,整個(gè)排序過(guò)程可以遞歸進(jìn)行吗货,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。

排序原理:

1.首先設(shè)定一個(gè)分界值狈网,通過(guò)該分界值將數(shù)組分成左右兩部分宙搬。
2.將大于或等于分界值的數(shù)據(jù)放到數(shù)組右邊,小于分界值的放到數(shù)組左邊拓哺。此時(shí)左邊部分中各元素都小于或等于分界值勇垛,而右邊部分中各元素都大于或等于分界值。
3.然后士鸥,左邊和右邊的數(shù)據(jù)可以獨(dú)立排序闲孤。對(duì)于左側(cè)的數(shù)組數(shù)據(jù),又可以取一個(gè)分界值烤礁,將該部分?jǐn)?shù)據(jù)讼积,分成左右兩部分,同樣在左邊放置較小值鸽凶,右邊放置較大值币砂。右側(cè)的數(shù)組數(shù)據(jù)同樣做類似的處理。
4.重復(fù)上述過(guò)程玻侥,可以看出這是一個(gè)遞歸定義决摧。通過(guò)遞歸將左邊部分排序好,再將右邊部分排序好凑兰,這樣整個(gè)數(shù)組都排序完成了掌桩。


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

//比較v與w的大小
private static boolean less(Comparable v, Comparable w) {
        return v.compareTo(w) < 0;
    }
//交換索引i與索引j位置的元素
private static void exch(Comparable[] a, int i, int j) {
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
//遞歸調(diào)用sort的重載方法。
 public static void sort(Comparable[] a) {
        int low = 0;
        int high = a.length-1;
        sort(a,low,high);
    }
  private static void sort(Comparable[] a, int low, int high) {
        //安全校驗(yàn)姑食,如果輸入的索引位置有誤波岛,直接break
        if (high<=low){
            return;
        }
        //分界值的索引(變換后的索引)
        int partition = partition(a, low, high);
        //以索引位置兩邊進(jìn)行排序
        sort(a,low,partition-1);
        sort(a,partition+1,high);
    }
//切分
 public static int partition(Comparable[] a, int low, int high) {
        //確定分界值
        Comparable key = a[low];
        //定義兩個(gè)指針,分界指向待切分元素的最小索引處和最大索引處的下一個(gè)位置音半。
        Integer left = low;
        Integer right = high+1;
        //循環(huán)掃描進(jìn)行切分则拷。
        while (true){
             //從右往左掃描,移動(dòng)right指針曹鸠,找到比分界值小的元素
            while (less(key,a[--right])){
                //當(dāng)兩個(gè)指針相遇煌茬,已經(jīng)掃描所有的元素,停止切分
                if (right==low){
                    break;
                }
            }
          //從左往右掃描彻桃,移動(dòng)left指針绍赛,找到比分界值大的元素
            while (less(a[++left],key)){
                if (left==high){
                    break;
                }
            }
            //掃描完畢后雷,結(jié)束掃描
            if (left>=right){
                break;
            }else {
                exch(a,left,right);
            }
        }
        exch(a,low,right);

        return right;
    }

測(cè)試類:

public class QuickTest {
    public static void main(String[] args) {
        Integer[] arr = {6,1,2,7,9,3,4,5,8};

        Quick.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扶欣,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子剔交,更是在濱河造成了極大的恐慌,老刑警劉巖改衩,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岖常,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡燎字,警方通過(guò)查閱死者的電腦和手機(jī)腥椒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)候衍,“玉大人笼蛛,你說(shuō)我怎么就攤上這事◎嚷梗” “怎么了滨砍?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)妖异。 經(jīng)常有香客問(wèn)我惋戏,道長(zhǎng),這世上最難降的妖魔是什么他膳? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任响逢,我火速辦了婚禮,結(jié)果婚禮上棕孙,老公的妹妹穿的比我還像新娘舔亭。我一直安慰自己,他們只是感情好蟀俊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布钦铺。 她就那樣靜靜地躺著,像睡著了一般肢预。 火紅的嫁衣襯著肌膚如雪矛洞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天烫映,我揣著相機(jī)與錄音沼本,去河邊找鬼。 笑死锭沟,一個(gè)胖子當(dāng)著我的面吹牛擅威,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冈钦,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼李请!你這毒婦竟也來(lái)了瞧筛?” 一聲冷哼從身側(cè)響起厉熟,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎较幌,沒想到半個(gè)月后揍瑟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乍炉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年绢片,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岛琼。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡底循,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出槐瑞,到底是詐尸還是另有隱情熙涤,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布困檩,位于F島的核電站祠挫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏悼沿。R本人自食惡果不足惜等舔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望糟趾。 院中可真熱鬧慌植,春花似錦、人聲如沸拉讯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)魔慷。三九已至只锭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間院尔,已是汗流浹背蜻展。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留邀摆,地道東北人纵顾。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像栋盹,于是被迫代替她去往敵國(guó)和親施逾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

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

  • 希爾排序原理:1.選定一個(gè)增長(zhǎng)量h蠕搜,按照增長(zhǎng)量h作為數(shù)據(jù)分組的依據(jù)怎茫,對(duì)數(shù)據(jù)進(jìn)行分組。2.對(duì)分好的每一組進(jìn)行插入排序...
    淺談碼生活閱讀 313評(píng)論 0 0
  • ??快速排序(Quick Sort)法和冒泡排序法類似妓灌,都是基于交換排序思想的轨蛤。快速排序?qū)γ芭菖判蚍ㄟM(jìn)行了改進(jìn)虫埂,從...
    一笑小先生閱讀 391評(píng)論 0 1
  • 1.什么是快速排序 基本思想是:通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分祥山,其中一部分的所有數(shù)據(jù)都比另外一部分的...
    豎起大拇指閱讀 554評(píng)論 0 1
  • 簡(jiǎn)介 快速排序(Quicksort)是對(duì)冒泡排序的一種改進(jìn)。創(chuàng)始人:C. A. R. Hoare出現(xiàn)的時(shí)間:196...
    黑夜_蚊香閱讀 253評(píng)論 0 0
  • 整一下老早就聽說(shuō)過(guò)的告丢,但是卻沒有深入了解過(guò)的排序算法枪蘑。首先,排序算法分為兩大類: 比較類排序:通過(guò)比較來(lái)決定元素間...
    符夕閱讀 181評(píng)論 0 0