成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

算法Training——排序

syoya / 1537人閱讀

摘要:對(duì)于不穩(wěn)定的排序算法,只需要舉出實(shí)例,就能證明其不穩(wěn)定性。而對(duì)穩(wěn)定排序算法,必須對(duì)算法進(jìn)行分析才能判斷其是否穩(wěn)定排序算法是否穩(wěn)定是由具體算法決定的,穩(wěn)定算法也可以在某種條件下變?yōu)椴环€(wěn)定算法。

分類(lèi)

排序算法主要分為兩大類(lèi)

比較排序,主要有:冒泡排序,選擇排序,插入排序,歸并排序,堆排序,快速排序等

非比較排序,主要有:計(jì)數(shù)排序,基數(shù)排序,桶排序等

穩(wěn)定性

排序算法的穩(wěn)定性定義:
如果序列中有a=b,排序前a在b之前,排序后a還在b之前,則稱(chēng)這種排序算法是穩(wěn)定的。

對(duì)于不穩(wěn)定的排序算法,只需要舉出實(shí)例,就能證明其不穩(wěn)定性。而對(duì)穩(wěn)定排序算法,必須對(duì)算法進(jìn)行分析才能判斷其是否穩(wěn)定

排序算法是否穩(wěn)定是由具體算法決定的,穩(wěn)定算法也可以在某種條件下變?yōu)椴环€(wěn)定算法。例如冒泡排序中,把交換兩數(shù)的條件變?yōu)锳[i]>=A[i+1](原本是>號(hào))

上例告訴我們,算法是由具體的人來(lái)寫(xiě)的,寫(xiě)的垃圾,穩(wěn)定算法也能寫(xiě)的不穩(wěn)定
常見(jiàn)排序算法性能表

具體排序算法分析和實(shí)例 1. 冒泡排序 介紹

重復(fù)地走訪過(guò)要排序的元素,依次比較相鄰兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們調(diào)換過(guò)來(lái),直到?jīng)]有元素再需要交換,排序完成。這個(gè)算法的名字由來(lái)是因?yàn)樵叫?或越大)的元素會(huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端。

步驟

比較相鄰的元素,如果前一個(gè)比后一個(gè)大,就把它們兩個(gè)調(diào)換位置

對(duì)每一對(duì)相鄰元素作同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì)。這步做完后,最后的元素會(huì)是最大的數(shù)

針對(duì)所有的元素重復(fù)以上的步驟,除了已經(jīng)排序完成的數(shù)

實(shí)例 1. 描述

給一組整數(shù),按照升序排序,使用選擇排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法

2. 樣例

對(duì)于數(shù)組 [3, 2, 1, 4, 5], 排序后為:[1, 2, 3, 4, 5]

3. 分析

無(wú)需分析

4. 解答
fun sortInteger(a : IntArray)
{
    val len = a.size - 1
    var alreadyNum =  0
    var sortFinish = false

    while (alreadyNum <= len - 1 && !sortFinish)
    {
        var perSortFinish = true

        for (i in 1..(len - alreadyNum))
        {
            if (a[i-1] > a[i])
            {
                val temp = a[i-1]
                a[i-1] = a[i]
                a[i] = temp
                perSortFinish = false
            }
        }

        sortFinish = perSortFinish
        alreadyNum += 1
    }
}
public void sortIntegers(int[] A) {
    int len = A.length - 1;
    int alreadyNum = 0;
    boolean sortFinish = false;

    while (alreadyNum <= len - 1 && !sortFinish)
    {
        boolean perSortFinish = true;

        for (int i=1; i <= len-alreadyNum; i++)
        {
            if (A[i-1] > A[i])
            {
                int temp = A[i-1];
                A[i-1] = A[i];
                A[i] = temp;
                perSortFinish = false;
            }
        }

        sortFinish = perSortFinish;
        alreadyNum += 1;
    }
}
2. 快速排序 介紹

通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過(guò)程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。

步驟

先從數(shù)列中取出一個(gè)數(shù)(為方便通常會(huì)選第一個(gè)數(shù))作為基準(zhǔn)數(shù)

逐個(gè)比較,將比這個(gè)數(shù)大的數(shù)全放到它的右邊,小于或等于它的數(shù)全放到它的左邊

再對(duì)左右區(qū)間重復(fù)第二步,直到各區(qū)間只有一個(gè)數(shù)

實(shí)例

直接沿用上一題的實(shí)例,為便于閱讀,將該例子再寫(xiě)一遍

1. 描述

給一組整數(shù),按照升序排序,使用選擇排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法

2. 樣例

對(duì)于數(shù)組 [3, 2, 1, 4, 5], 排序后為:[1, 2, 3, 4, 5]

3. 分析

無(wú)需分析

4. 解答

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69438.html

相關(guān)文章

  • 移動(dòng)端開(kāi)發(fā)工程師的AI突圍之路

    摘要:在此期間,移動(dòng)端開(kāi)發(fā)工程師可謂是風(fēng)生水起,幾乎人們?nèi)粘I钪薪佑|互聯(lián)網(wǎng)的途徑,都是通過(guò)一個(gè)叫的東西,基于這兩大系統(tǒng)平臺(tái)。而上面說(shuō)的這些事情,都是當(dāng)今移動(dòng)端開(kāi)發(fā)者的機(jī)會(huì)。 古典程序員集體恐慌 隨著2007年第一臺(tái)iPhone問(wèn)世,隨后Android的猛烈跟進(jìn),蘋(píng)果和谷歌推動(dòng)了長(zhǎng)達(dá)10年的移動(dòng)互聯(lián)網(wǎng)浪潮。在此期間,移動(dòng)端開(kāi)發(fā)工程師可謂是風(fēng)生水起,幾乎人們?nèi)粘I钪薪佑|互聯(lián)網(wǎng)90%的途徑,都...

    2bdenny 評(píng)論0 收藏0
  • 深入淺出排序學(xué)習(xí):寫(xiě)給程序員的算法系統(tǒng)開(kāi)發(fā)實(shí)踐

    引言 我們正處在一個(gè)知識(shí)爆炸的時(shí)代,伴隨著信息量的劇增和人工智能的蓬勃發(fā)展,互聯(lián)網(wǎng)公司越發(fā)具有強(qiáng)烈的個(gè)性化、智能化信息展示的需求。而信息展示個(gè)性化的典型應(yīng)用主要包括搜索列表、推薦列表、廣告展示等等。 很多人不知道的是,看似簡(jiǎn)單的個(gè)性化信息展示背后,涉及大量的數(shù)據(jù)、算法以及工程架構(gòu)技術(shù),這些足以讓大部分互聯(lián)網(wǎng)公司望而卻步。究其根本原因,個(gè)性化信息展示背后的技術(shù)是排序?qū)W習(xí)問(wèn)題(Learning to ...

    caige 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<