數(shù)組排序

/**
* 冒泡法排序
*比較相鄰的元素祝辣。如果第一個比第二個大贴妻,就交換他們兩個。
*對每一對相鄰元素作同樣的工作蝙斜,從開始第一對到結尾的最后一對名惩。在這一點,最后的元素應該會是最大的數(shù)孕荠。
*針對所有的元素重復以上的步驟娩鹉,除了最后一個。
*持續(xù)每次對越來越少的元素重復上面的步驟稚伍,直到?jīng)]有任何一對數(shù)字需要比較弯予。
*@paramnumbers 需要排序的整型數(shù)組*/

public static voidbubbleSort(int[] numbers) {
inttemp;// 記錄臨時中間值
intsize = numbers.length;// 數(shù)組大小
for(inti =0; i < size -1; i++) {
for(intj = i +1; j < size; j++) {
if(numbers[i] < numbers[j]) {// 交換兩數(shù)的位置

temp = numbers[i];

numbers[i] = numbers[j];

numbers[j] = temp;

}

}

}

}

/**

* 快速排序

*

    *

    從數(shù)列中挑出一個元素,稱為“基準”

    *

    重新排序數(shù)列槐瑞,所有元素比基準值小的擺放在基準前面熙涤,所有元素比基準值大的擺在基準的后面(相同的數(shù)可以到任一邊)。在這個分割之后困檩,

    * 該基準是它的最后位置祠挫。這個稱為分割(partition)操作。

    *

    遞歸地把小于基準值元素的子數(shù)列和大于基準值元素的子數(shù)列排序悼沿。

    *

    *

    *@paramnumbers

    *@paramstart

    *@paramend

    */

    public static voidquickSort(int[] numbers,intstart,intend) {

    if(start < end) {

    intbase = numbers[start];// 選定的基準值(第一個數(shù)值作為基準值)

    inttemp;// 記錄臨時中間值

    inti = start, j = end;

    do{

    while((numbers[i] < base) && (i < end))

    i++;

    while((numbers[j] > base) && (j > start))

    j--;

    if(i <= j) {

    temp = numbers[i];

    numbers[i] = numbers[j];

    numbers[j] = temp;

    i++;

    j--;

    }

    }while(i <= j);

    if(start < j)

    quickSort(numbers, start, j);

    if(end > i)

    quickSort(numbers, i, end);

    }

    }

    /**

    * 選擇排序

    *

    在未排序序列中找到最小元素慌植,存放到排序序列的起始位置

    *

    再從剩余未排序元素中繼續(xù)尋找最小元素,然后放到排序序列末尾丈钙。

    *

    以此類推雏赦,直到所有元素均排序完畢芙扎。

    *

    *@paramnumbers

    */

    public static voidselectSort(int[] numbers) {

    intsize = numbers.length, temp;

    for(inti =0; i < size; i++) {

    intk = i;

    for(intj = size -1; j >i; j--)? {

    if(numbers[j] < numbers[k])? k = j;

    }

    temp = numbers[i];

    numbers[i] = numbers[k];

    numbers[k] = temp;

    }

    }

    /**

    * 插入排序

    *

      *

      從第一個元素開始俏橘,該元素可以認為已經(jīng)被排序

      *

      取出下一個元素圈浇,在已經(jīng)排序的元素序列中從后向前掃描

      *

      如果該元素(已排序)大于新元素汉额,將該元素移到下一位置

      *

      重復步驟3榨汤,直到找到已排序的元素小于或者等于新元素的位置

      *

      將新元素插入到該位置中

      *

      重復步驟2

      *

      *

      *@paramnumbers

      */

      public static voidinsertSort(int[] numbers) {

      intsize = numbers.length, temp, j;

      for(inti=1; i

      temp = numbers[i];

      for(j = i; j >0&& temp < numbers[j-1]; j--)

      numbers[j] = numbers[j-1];

      numbers[j] = temp;

      }

      }

      /**

      * 歸并排序

      *

        *

        申請空間妓灌,使其大小為兩個已經(jīng)排序序列之和蜜宪,該空間用來存放合并后的序列

        *

        設定兩個指針圃验,最初位置分別為兩個已經(jīng)排序序列的起始位置

        *

        比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間斧散,并移動指針到下一位置

        *

        重復步驟3直到某一指針達到序列尾

        *

        將另一序列剩下的所有元素直接復制到合并序列尾

        *

        *

        *@paramnumbers

        */

        public static voidmergeSort(int[] numbers,intleft,intright) {

        intt =1;// 每組元素個數(shù)

        intsize = right - left +1;

        while(t < size) {

        ints = t;// 本次循環(huán)每組元素個數(shù)

        t =2* s;

        inti = left;

        while(i + (t -1) < size) {

        merge(numbers, i, i + (s -1), i + (t -1));

        i += t;

        }

        if(i + (s -1) < right)

        merge(numbers, i, i + (s -1), right);

        }

        }

        /**

        * 歸并算法實現(xiàn)

        *

        *@paramdata

        *@paramp

        *@paramq

        *@paramr

        */

        private static voidmerge(int[] data,intp,intq,intr) {

        int[] B =new int[data.length];

        ints = p;

        intt = q +1;

        intk = p;

        while(s <= q && t <= r) {

        if(data[s] <= data[t]) {

        B[k] = data[s];

        s++;

        }else{

        B[k] = data[t];

        t++;

        }

        k++;

        }

        if(s == q +1)

        B[k++] = data[t++];

        else

        B[k++] = data[s++];

        for(inti = p; i <= r; i++)

        data[i] = B[i];

        }

        最后編輯于
        ?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
        • 序言:七十年代末,一起剝皮案震驚了整個濱河市麻裁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌色迂,老刑警劉巖,帶你破解...
          沈念sama閱讀 218,036評論 6 506
        • 序言:濱河連續(xù)發(fā)生了三起死亡事件赫悄,死亡現(xiàn)場離奇詭異埂淮,居然都是意外死亡写隶,警方通過查閱死者的電腦和手機慕趴,發(fā)現(xiàn)死者居然都...
          沈念sama閱讀 93,046評論 3 395
        • 文/潘曉璐 我一進店門躏啰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人给僵,你說我怎么就攤上這事帝际《拙鳎” “怎么了?”我有些...
          開封第一講書人閱讀 164,411評論 0 354
        • 文/不壞的土叔 我叫張陵脯爪,是天一觀的道長痕慢。 經(jīng)常有香客問我守屉,道長蒿辙,這世上最難降的妖魔是什么? 我笑而不...
          開封第一講書人閱讀 58,622評論 1 293
        • 正文 為了忘掉前任恭取,我火速辦了婚禮蜈垮,結果婚禮上,老公的妹妹穿的比我還像新娘攒发。我一直安慰自己惠猿,他們只是感情好偶妖,可當我...
          茶點故事閱讀 67,661評論 6 392
        • 文/花漫 我一把揭開白布趾访。 她就那樣靜靜地躺著董虱,像睡著了一般空扎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上转锈,一...
          開封第一講書人閱讀 51,521評論 1 304
        • 那天,我揣著相機與錄音砌溺,去河邊找鬼。 笑死规伐,一個胖子當著我的面吹牛匣缘,可吹牛的內(nèi)容都是我干的鲜棠。 我是一名探鬼主播豁陆,決...
          沈念sama閱讀 40,288評論 3 418
        • 文/蒼蘭香墨 我猛地睜開眼盒音,長吁一口氣:“原來是場噩夢啊……” “哼祥诽!你這毒婦竟也來了瓮恭?” 一聲冷哼從身側響起偎血,我...
          開封第一講書人閱讀 39,200評論 0 276
        • 序言:老撾萬榮一對情侶失蹤颇玷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谒亦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體份招,經(jīng)...
          沈念sama閱讀 45,644評論 1 314
        • 正文 獨居荒郊野嶺守林人離奇死亡锁摔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
          茶點故事閱讀 37,837評論 3 336
        • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了十气。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砸西。...
          茶點故事閱讀 39,953評論 1 348
        • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖衅疙,靈堂內(nèi)的尸體忽然破棺而出杖狼,到底是詐尸還是另有隱情蝶涩,我是刑警寧澤绿聘,帶...
          沈念sama閱讀 35,673評論 5 346
        • 正文 年R本政府宣布嗽上,位于F島的核電站,受9級特大地震影響熄攘,放射性物質(zhì)發(fā)生泄漏兽愤。R本人自食惡果不足惜,卻給世界環(huán)境...
          茶點故事閱讀 41,281評論 3 329
        • 文/蒙蒙 一挪圾、第九天 我趴在偏房一處隱蔽的房頂上張望浅萧。 院中可真熱鬧,春花似錦哲思、人聲如沸洼畅。這莊子的主人今日做“春日...
          開封第一講書人閱讀 31,889評論 0 22
        • 文/蒼蘭香墨 我抬頭看了看天上的太陽帝簇。三九已至,卻和暖如春靠益,著一層夾襖步出監(jiān)牢的瞬間丧肴,已是汗流浹背。 一陣腳步聲響...
          開封第一講書人閱讀 33,011評論 1 269
        • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留途样,地道東北人凛驮。 一個月前我還...
          沈念sama閱讀 48,119評論 3 370
        • 正文 我出身青樓,卻偏偏與公主長得像肩袍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
          茶點故事閱讀 44,901評論 2 355

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

        • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序裂逐,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
          蟻前閱讀 5,184評論 0 52
        • 概述:排序有內(nèi)部排序和外部排序鸽照,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
          每天刷兩次牙閱讀 3,732評論 0 15
        • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個記錄插入到已排序好...
          依依玖玥閱讀 1,253評論 0 2
        • 數(shù)組排序在日常編程中用到的其實還是比較多的绰上,比如把一組數(shù)據(jù)按時間排序,按首字母排序百揭,按大小排序等等厨内,那么就讓我們一...
          一木_qintb閱讀 12,975評論 1 2
        • 數(shù)組排序在日常編程中用到的其實還是比較多的瞭亮,比如把一組數(shù)據(jù)按時間排序厂汗,按首字母排序艳丛,按大小排序等等,那么就讓我們一...
          xueNoble閱讀 2,175評論 0 9