經(jīng)典排序算法(Java實現(xiàn))

1.算法介紹

1.1 選擇排序

選擇排序的工作原理在于每一次從待排序的數(shù)據(jù)元素中選出最邪曷摹(或最大)的一個元素寂诱,存放在序列的起始位置拂苹,直到全部待排序的數(shù)據(jù)元素排完痰洒。
代碼實現(xiàn)如下:

public static void selectionSort(int[] arr){
    for(int i = 0; i < arr.length - 1; i++){
        int min = i;
        for(int j = i + 1; j < arr.length; j++)
            if(arr[j] < arr[min])
                min = j;
        int temp = arr[i];
        arr[i] = arr[min];
        arr[min] = temp;
    }
}

1.2 冒泡排序

比較相鄰的元素,如果第一個元素比第二個元素大的話就交換位置丘喻,對每一對相鄰元素都進行這樣的操作,那么最后的元素就是最大的元素泉粉。然后對前n - 1個元素進行同樣的操作连霉,直到?jīng)]有相鄰元素可以比較,那么排序就完成了跺撼。
代碼實現(xiàn)如下:

public static void bubbleSort(int[] arr){
    for(int i = 0; i < arr.length - 1; i++){
        for(int j = 0; j < arr.length - i - 1; j++){
            if(arr[j] > arr[j + 1]){
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

1.3 插入排序

插入排序的基本思想是:每步將一個待排序的紀(jì)錄,按其關(guān)鍵碼值的大小插入前面已經(jīng)排序的文件中適當(dāng)位置上歉井,直到全部插入完為止。與選擇排序一樣哩至,當(dāng)前索引的左邊的所有元素是有序的,但它們的最終位置還不確定菩貌,為了給更小的元素騰出空間卢佣,可能需要被移動箭阶。和選擇排序不同的是虚茶,插入排序所需的時間取決于輸入元素的初始順序尾膊。
代碼實現(xiàn)如下:

public static void insertionSort(int[] arr){
    for(int i = 1; i < arr.length; i++){
        for(int j = i; j > 0 && arr[j - 1] > arr[j]; j--){
            int temp = arr[j];
            arr[j] = arr[j - 1];
            arr[j - 1] = temp;
        } 
    }
}

1.4 希爾排序

希爾排序是基于插入排序的排序算法,它的基本思想是先將整個待排記錄序列分割成若干個子序列冈敛,待整個序列中的記錄“基本有序”時待笑,再對全體記錄進行一次直接插入排序抓谴。而子序列的構(gòu)成不是簡單地“逐段分割”暮蹂,而是將相隔某個增量的記錄來組成一個子序列癌压。如何選取增量序列是決定希爾排序性能的重要因素,但至今尚未有人求得最佳的增量序列滩届。
代碼實現(xiàn)如下集侯,增量序列為 1/2(3^k - 1):

public static void shellSort(int[] arr){
    int N = arr.length;
    int h = 1;
    while(h < N/3)
        h = 3*h + 1;
    while(h >= 1){
        for(int i = h; i < N; i++){
            for(int j = i; j >= h && arr[j - h] > arr[j]; j -= h){
                int temp = arr[j];
                arr[j] = arr[j - h];
                arr[j - h] = temp;
            } 
        }
        h = h / 3;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帜消,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子泡挺,更是在濱河造成了極大的恐慌,老刑警劉巖娄猫,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件生闲,死亡現(xiàn)場離奇詭異,居然都是意外死亡月幌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門飞醉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缅帘,你說我怎么就攤上這事难衰∏瘴蓿” “怎么了盖袭?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鳄虱。 經(jīng)常有香客問我弟塞,道長拙已,這世上最難降的妖魔是什么决记? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任倍踪,我火速辦了婚禮,結(jié)果婚禮上建车,老公的妹妹穿的比我還像新娘扩借。我一直安慰自己缤至,他們只是感情好潮罪,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布领斥。 她就那樣靜靜地躺著,像睡著了一般戒突。 火紅的嫁衣襯著肌膚如雪屯碴。 梳的紋絲不亂的頭發(fā)上膊存,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天忱叭,我揣著相機與錄音,去河邊找鬼今艺。 笑死,一個胖子當(dāng)著我的面吹牛虚缎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播实牡,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼创坞!你這毒婦竟也來了碗短?” 一聲冷哼從身側(cè)響起题涨,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤偎谁,失蹤者是張志新(化名)和其女友劉穎纲堵,沒想到半個月后巡雨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體席函,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年向挖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片何之。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖溶推,靈堂內(nèi)的尸體忽然破棺而出徊件,到底是詐尸還是另有隱情蒜危,我是刑警寧澤虱痕,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布辐赞,位于F島的核電站部翘,受9級特大地震影響响委,放射性物質(zhì)發(fā)生泄漏新思。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一夹囚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧荸哟,春花似錦假哎、人聲如沸鞍历。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掏父。三九已至秆剪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仅讽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工钾挟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掺出。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像汤锨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子闲礼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

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

  • 概述排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序柬泽,而外部排序是因排序的數(shù)據(jù)很大慎菲,一次不能容納全部的...
    Luc_閱讀 2,259評論 0 35
  • 該系列文章主要是記錄下自己暑假這段時間的學(xué)習(xí)筆記锨并,暑期也在實習(xí)露该,抽空學(xué)了很多第煮,每個方面的知識我都會另起一篇博客去記...
    Yanci516閱讀 12,200評論 6 19
  • 概述 排序有內(nèi)部排序和外部排序解幼,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大书幕,一次不能容納全部...
    蟻前閱讀 5,170評論 0 52
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序台汇,而外部排序是因排序的數(shù)據(jù)很大苛骨,一次不能容納全部...
    每天刷兩次牙閱讀 3,729評論 0 15
  • //對 A 密碼使用Bcrypt 加密$password= Hash::make('secret');//你也可直...
    渴望碩壯的成熟閱讀 2,158評論 0 2