算法(四)-排序

一、排序分類

簡單寫下如下4種排序:

排序算法 平均時間復雜度 空間復雜度 穩(wěn)定性
冒泡排序 O(n2) O(1) 穩(wěn)定
選擇排序 O(n2) O(1) 不穩(wěn)定
插入排序 O(n2) O(1) 穩(wěn)定
快速排序 O(nlogn) O(logn) 不穩(wěn)定
二、排序介紹
2.1 冒泡排序

思路:比較相鄰的元素普碎。如果第一個比第二個大龙宏,就交換他們兩個晌涕。每輪冒泡出一個最大或者最小元素出來蚣常。

public static int[] bubbleSort(int[] arr) {
   for (int i = 0; i < arr.length; i++) {
       for (int j = i + 1; j < arr.length; j++) {
           if (arr[i] > arr[j]) {
               int tmp = arr[i];
               arr[i] = arr[j];
               arr[j] = tmp;
           }
       }
   }
   return arr;
}
冒泡排序
2.2選擇排序

思路:第一輪找到最小元素厘惦,與0號元素互換饥侵,第二輪找到第二小元素與1號元素互換鸵赫,以此類推

public static int[] selectSort(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        int min = i;
       for (int j = i + 1; j < arr.length; j++) {
            if (arr[j] < arr[min]) {
                min = j;
           }
        }
        if (min != i) {
            int tmp = arr[i];
           arr[i] = arr[min];
           arr[min] = tmp;
       }
    }
    return arr;
}
選擇排序
2.3 插入排序

思路:遍歷數組,后面的每一位都與前面已排序的數組進行掃描比較躏升,確定對應的順序位置并插入辩棒,其余元素均往后移1位。

public static int[] insertSort(int[] arr) {
    for (int i = 1; i < arr.length; i++) {
        int cur = arr[i];
        int j;
        for (j = i-1; j >= 0; j--) { //與之前的每一個數比較
           if(cur < arr[j]){
               arr[j+1] = arr[j];//比較之后立即移動位置
           }else {
               break;
           }
        }
        //插入屬于到對應位置(這里因為做了j--,所以需要+1加回來)
        arr[j+1] = cur;
    }
    return arr;
}
插入排序
2.4 快速排序

思路:分治 + 遞歸
先從數列中取出一個數作為key值一睁,左右兩邊指針往中間走钻弄,左邊找出比基準大的數,右邊找出比基準小的數者吁,兩者交換窘俺。如果左右指針相交,則該位置值與基準位置交換值复凳。然后再依次遞歸當前基準位置的左邊部分和右邊部分瘤泪。最終每個小數列有序,拼成一整個有序數列育八。

    public static void quickSort(int[] arr, int low, int high) {
        if (low > high) {
            return;
        }
        int i = low;
        int j = high;
        int key = arr[low];

        while (i < j) {
            while (key <= arr[j] && i < j) {
                j--;
            }

            while (key >= arr[i] && i < j) {
                i++;
            }

            if (i < j) {
                int tmp = arr[j];
                arr[j] = arr[i];
                arr[i] = tmp;
            }
        }

        //最后將基準位置與i和j重疊的位置交換
        arr[low] = arr[i];
        arr[i] = key;

        //遞歸調用左半邊數組
        quickSort(arr, low, j - 1);
        //遞歸調用右半邊數組
        quickSort(arr, j + 1, high);
    }
快速排序

未完待續(xù)...

動圖出處:
http://www.reibang.com/p/c4217456c224

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
禁止轉載对途,如需轉載請通過簡信或評論聯系作者。
  • 序言:七十年代末髓棋,一起剝皮案震驚了整個濱河市实檀,隨后出現的幾起案子,更是在濱河造成了極大的恐慌仲锄,老刑警劉巖劲妙,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異儒喊,居然都是意外死亡,警方通過查閱死者的電腦和手機币呵,發(fā)現死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門怀愧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人余赢,你說我怎么就攤上這事芯义。” “怎么了妻柒?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵扛拨,是天一觀的道長。 經常有香客問我举塔,道長绑警,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任央渣,我火速辦了婚禮计盒,結果婚禮上,老公的妹妹穿的比我還像新娘芽丹。我一直安慰自己北启,他們只是感情好,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咕村,像睡著了一般场钉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上懈涛,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天逛万,我揣著相機與錄音,去河邊找鬼肩钠。 笑死泣港,一個胖子當著我的面吹牛,可吹牛的內容都是我干的价匠。 我是一名探鬼主播当纱,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼踩窖!你這毒婦竟也來了坡氯?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤洋腮,失蹤者是張志新(化名)和其女友劉穎箫柳,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體啥供,經...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡悯恍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了伙狐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涮毫。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖贷屎,靈堂內的尸體忽然破棺而出罢防,到底是詐尸還是另有隱情,我是刑警寧澤唉侄,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布咒吐,位于F島的核電站,受9級特大地震影響属划,放射性物質發(fā)生泄漏恬叹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一榴嗅、第九天 我趴在偏房一處隱蔽的房頂上張望妄呕。 院中可真熱鬧,春花似錦嗽测、人聲如沸绪励。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疏魏。三九已至停做,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間大莫,已是汗流浹背蛉腌。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留只厘,地道東北人烙丛。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像羔味,于是被迫代替她去往敵國和親河咽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355