Java的八種排序

1.冒泡排序

冒泡排序是一種簡(jiǎn)單的排序算法。它重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過(guò)來(lái)。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說(shuō)該數(shù)列已經(jīng)排序完成。這個(gè)算法的名字由來(lái)是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端。

/**
     * 冒泡排序
     * 比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。  
     * 對(duì)每一對(duì)相鄰元素作同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì)。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。  
     * 針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。
     * 持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。 
     * @param numbers 需要排序的整型數(shù)組
     */
    public static void bubbleSort(int[] numbers)
    {
        int temp = 0;
        int size = numbers.length;
        for(int i = 0 ; i < size-1; i ++)
        {
        for(int j = 0 ;j < size-1-i ; j++)
        {
            if(numbers[j] > numbers[j+1])  //交換兩數(shù)位置
            {
            temp = numbers[j];
            numbers[j] = numbers[j+1];
            numbers[j+1] = temp;
            }
        }
        }
    }

2.快速排序

3.選擇排序

在要排序的一組數(shù)中,選出最小的一個(gè)數(shù)與第一個(gè)位置的數(shù)交換;然后在剩下的數(shù)當(dāng)中再找最小的與第二個(gè)位置的數(shù)交換,如此循環(huán)到倒數(shù)第二個(gè)數(shù)和最后一個(gè)數(shù)比較為止。

   /**
     * 選擇排序算法
     * 在未排序序列中找到最小元素,存放到排序序列的起始位置  
     * 再?gòu)氖S辔磁判蛟刂欣^續(xù)尋找最小元素,然后放到排序序列末尾。 
     * 以此類(lèi)推,直到所有元素均排序完畢。 
     * @param numbers
     */
    public static void selectSort(int[] numbers)
    {
    int size = numbers.length; //數(shù)組長(zhǎng)度
    int temp = 0 ; //中間變量
    
    for(int i = 0 ; i < size ; i++)
    {
        int k = i;   //待確定的位置
        //選擇出應(yīng)該在第i個(gè)位置的數(shù)
        for(int j = size -1 ; j > i ; j--)
        {
        if(numbers[j] < numbers[k])
        {
            k = j;
        }
        }
        //交換兩個(gè)數(shù)
        temp = numbers[i];
        numbers[i] = numbers[k];
        numbers[k] = temp;
    }
    }

4.插入排序

每步將一個(gè)待排序的記錄,按其順序碼大小插入到前面已經(jīng)排序的字序列的合適位置(從后向前找到合適位置后),直到全部插入排序完為止。

/**  
     * 插入排序
     * 
     * 從第一個(gè)元素開(kāi)始,該元素可以認(rèn)為已經(jīng)被排序
     * 取出下一個(gè)元素,在已經(jīng)排序的元素序列中從后向前掃描 
     * 如果該元素(已排序)大于新元素,將該元素移到下一位置  
     * 重復(fù)步驟3,直到找到已排序的元素小于或者等于新元素的位置  
     * 將新元素插入到該位置中  
     * 重復(fù)步驟2  
     * @param numbers  待排序數(shù)組
     */  
    public static void insertSort(int[] numbers)
    {
    int size = numbers.length;
    int temp = 0 ;
    int j =  0;
    
    for(int i = 0 ; i < size ; i++)
    {
        temp = numbers[i];
        //假如temp比前面的值小,則將前面的值后移
        for(j = i ; j > 0 && temp < numbers[j-1] ; j --)
        {
        numbers[j] = numbers[j-1];
        }
        numbers[j] = temp;
    }
    }

5.希爾排序

6.歸并排序

7.堆排序

8.分配排序(基數(shù)排序)

1)插入排序(直接插入排序、希爾排序)

2)交換排序(冒泡排序、快速排序)

3)選擇排序(直接選擇排序、堆排序)

4)歸并排序

5)分配排序(基數(shù)排序)

所需輔助空間最多:歸并排序

所需輔助空間最少:堆排序

平均速度最快:快速排序

不穩(wěn)定:快速排序,希爾排序,堆排序。

排序復(fù)雜度比較
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概述排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的...
    Luc_閱讀 2,371評(píng)論 0 35
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,819評(píng)論 0 15
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,297評(píng)論 0 52
  • 總結(jié)一下常見(jiàn)的排序算法。 排序分內(nèi)排序和外排序。內(nèi)排序:指在排序期間數(shù)據(jù)對(duì)象全部存放在內(nèi)存的排序。外排序:指在排序...
    jiangliang閱讀 1,514評(píng)論 0 1
  • “升”,解讀為上升,引申為高升、登高、興旺等意??簇援?huà):一頂高高的官帽。 步步高升是一句祝語(yǔ),說(shuō)明多數(shù)人都愛(ài)聽(tīng),被...
    童年的流星閱讀 952評(píng)論 5 5

友情鏈接更多精彩內(nèi)容