排序算法

排序算法

  • 冒泡(Bubble)
  • 選擇
  • 插入
  • 歸并
  • 快速
  • 計(jì)數(shù)排序

冒泡排序

簡(jiǎn)單的說(shuō)就是捐凭,每一次遍歷都把最大(小)的通過(guò)比較選出來(lái)养涮。

  1. 從第一個(gè)元素開(kāi)始比較相鄰的兩個(gè)元素治专,把大(腥彀)的往后移;
  2. 比較到未排序的最后一個(gè)元素時(shí),會(huì)得出這趟冒泡得到的最大(卸懒睢)元素端朵;
  3. 一直遍歷到只有一個(gè)元素

代碼實(shí)現(xiàn):

(java)
int []a = {5,4,3,2,1,12,32,13,24,53};
        
        for (int i = a.length - 1 ; i >0; i--){
            for (int j = 0;j< i;j++){
                if(a[j] > a[j+1])
                {
                    int temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }

選擇排序

這個(gè)算法也很簡(jiǎn)單,每次都把未排序序列里最腥技(大)的選出來(lái)冲呢,放在序列。

  1. 一趟遍歷未排序序列招狸,選出最芯赐亍(大)的數(shù)字;
  2. 把這個(gè)數(shù)字放在未排序序列前面裙戏,*未排序序列 + 1
  3. 重復(fù)步驟到完成排序乘凸。

代碼實(shí)現(xiàn):

int []a = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};
        
        for (int i = 0; i<a.length;i++){
            int min = a[i];
            int mark = i;
            for(int j = i ;j <a.length ; j++){
                if( min > a[j]) 
                    {
                        min = a[j];
                        mark = j;
                    }
            }
            int temp = a[i];
            a[i] = min;
            a[mark] = temp;
            
        }

插入排序

排序流程:

  1. 從第一個(gè)元素開(kāi)始,該元素可以認(rèn)為已經(jīng)被排序
  2. 取出下一個(gè)元素累榜,在已經(jīng)排序的元素序列中從后向前掃描
  3. 如果被掃描的元素(已排序)大于新元素营勤,將該元素后移一位
  4. 重復(fù)步驟 3,直到找到已排序的元素小于或者等于新元素的位置
  5. 將新元素插入到該位置后
  6. 重復(fù)步驟 2~5

實(shí)現(xiàn)代碼:

package Sort;

public class InsertSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int []a = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};
        
        for (int i = 1;i<a.length;i++){
            int temp = a[i];
            for (int j = i - 1 ; j>=0 ; j--){
                if(temp < a[j]){
                    a[j+1] = a[j];
                    a[j] = temp;
                    
                }else{
                    break;
                }
            }

        }
        
        for (int i = 0 ; i< a.length ; i++)
            System.out.print(a[i]+" ");
    }

}

歸并排序

歸并排序采用呢壹罚,采用了分治法來(lái)讓兩個(gè)數(shù)組歸并葛作。

排序流程:

  1. 申請(qǐng)空間,使其大小為兩個(gè)已經(jīng)排序序列之和猖凛,該空間用來(lái)存放合并后的序列
  2. 設(shè)定兩個(gè)指針赂蠢,最初位置分別為兩個(gè)已經(jīng)排序序列的起始位置
  3. 比較兩個(gè)指針?biāo)赶虻脑兀x擇相對(duì)小的元素放入到合并空間辨泳,并移動(dòng)指針到下一位置
  4. 重復(fù)步驟 3 直到某一指針到達(dá)序列尾
  5. 將另一序列剩下的所有元素直接復(fù)制到合并序列尾
public static int[] sort(int[] nums, int low, int high) {  
        int mid = (low + high) / 2;  
        if (low < high) {  
            // 左邊  
            sort(nums, low, mid);  
            // 右邊  
            sort(nums, mid + 1, high);  
            // 左右歸并  
            merge(nums, low, mid, high);  
        }  
        return nums;  
    }  
    
    public static void merge(int[] nums, int low, int mid, int high) {  
        int[] temp = new int[high - low + 1];  
        int i = low;// 左指針  
        int j = mid + 1;// 右指針  
        int k = 0;  
  
        // 把較小的數(shù)先移到新數(shù)組中  
        while (i <= mid && j <= high) {  
            if (nums[i] < nums[j]) {  
                temp[k++] = nums[i++];  
            } else {  
                temp[k++] = nums[j++];  
            }  
        }  
  
        // 把左邊剩余的數(shù)移入數(shù)組  
        while (i <= mid) {  
            temp[k++] = nums[i++];  
        }  
  
        // 把右邊邊剩余的數(shù)移入數(shù)組  
        while (j <= high) {  
            temp[k++] = nums[j++];  
        }  
  
        // 把新數(shù)組中的數(shù)覆蓋nums數(shù)組  
        for (int k2 = 0; k2 < temp.length; k2++) {  
            nums[k2 + low] = temp[k2];  
        }  
    }
    
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int []a = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};
        MergeSort.sort(a, 0, a.length-1);
        
        for (int i = 0 ; i< a.length ; i++)
            System.out.print(a[i]+" ");

    }

快速排序

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末虱岂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子菠红,更是在濱河造成了極大的恐慌第岖,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件试溯,死亡現(xiàn)場(chǎng)離奇詭異绍傲,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)耍共,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)猎塞,“玉大人试读,你說(shuō)我怎么就攤上這事≤ⅲ” “怎么了钩骇?”我有些...
    開(kāi)封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我倘屹,道長(zhǎng)银亲,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任纽匙,我火速辦了婚禮务蝠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烛缔。我一直安慰自己馏段,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布践瓷。 她就那樣靜靜地躺著院喜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晕翠。 梳的紋絲不亂的頭發(fā)上喷舀,一...
    開(kāi)封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音淋肾,去河邊找鬼硫麻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛巫员,可吹牛的內(nèi)容都是我干的庶香。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼简识,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赶掖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起七扰,我...
    開(kāi)封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奢赂,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后颈走,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體膳灶,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年立由,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了轧钓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锐膜,死狀恐怖毕箍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情道盏,我是刑警寧澤而柑,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布文捶,位于F島的核電站,受9級(jí)特大地震影響媒咳,放射性物質(zhì)發(fā)生泄漏粹排。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一涩澡、第九天 我趴在偏房一處隱蔽的房頂上張望顽耳。 院中可真熱鬧,春花似錦筏养、人聲如沸斧抱。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辉浦。三九已至,卻和暖如春茎辐,著一層夾襖步出監(jiān)牢的瞬間宪郊,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工拖陆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弛槐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓依啰,卻偏偏與公主長(zhǎng)得像乎串,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子速警,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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