排序

1.概念:升序 降序
2.排序算法的穩(wěn)定性
3.不需要比較的排序:位圖 哈希(直接定址法--找出字符串中第一個(gè)只出現(xiàn)一次的字符)
4.內(nèi)部排序:數(shù)據(jù)可以一次性加載到內(nèi)存中
外部排序:數(shù)據(jù)不能一次性加載到內(nèi)存中

必須掌握:排序原理 代碼 時(shí)間復(fù)雜度 空間復(fù)雜度 穩(wěn)定性 應(yīng)用場(chǎng)景

常見排序算法

插入排序: 數(shù)據(jù)量小 盡可能有序 穩(wěn)定 時(shí)間復(fù)雜度0(n^2) 空間復(fù)雜度0(1)

插入排序.png
//插入排序:數(shù)據(jù)量小 盡可能有序 穩(wěn)定 時(shí)間復(fù)雜度0(n^2) 空間復(fù)雜度0(1)
void InsertSort(int array[], int size)
{
    //默認(rèn)已有一個(gè)數(shù)據(jù)
    for (int i = 1; i < size; i++)
    {
        int key = array[i];
        int end = i - 1;
        
        //找待插入元素的位置 & 搬移數(shù)據(jù)
        while (end >= 0 && key < array[end])
        {
            array[end + 1] = array[end];
            end--;
        }

        //插入數(shù)據(jù)
        array[end + 1] = key;
    }
}

void TestInsertSort()
{
    int array[] = { 2, 5, 4, 9, 3, 6, 8, 7, 1, 0 };
    InsertSort(array, sizeof(array) / sizeof(array[0]));
}
插入排序調(diào)試1.png

插入排序2.png

希爾排序:
時(shí)間0(n1.25)or0(n1.65) 空間0(1) 不穩(wěn)定:間隔元素排序榛搔,不穩(wěn)定 應(yīng)用場(chǎng)景:數(shù)據(jù)量大且雜亂祸泪。

希爾排序.png
void ShellSort(int array[], int size)
{
    int gap = 3;
    while (gap > 0)
    {
        for (int i = gap; i < size; i++)
        {
            int key = array[i];
            int end = i - gap;

            //找待插入元素的位置 & 搬移數(shù)據(jù)   (找位置嘗試二分查找癣朗。)
            while (end >= 0 && key < array[end])
            {
                array[end + gap] = array[end];
                end-=gap;
            }

            //插入數(shù)據(jù)
            array[end + gap] = key;
        }
        gap--;
    }
    
}

void TestShellSort()
{

    int array[] = { 2, 5, 4, 9, 3, 6, 8, 7, 1, 0 };
    InsertSort(array, sizeof(array) / sizeof(array[0]));
}
希爾排序調(diào)試1.png

希爾排序調(diào)試2.png

選擇排序


選擇排序.png
//選擇排序

void Swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;

}

void SelectSort(int *array, int size)
{
    for (int i = 0; i < size - 1; i++)
    {
        int maxPos = 0;
        for (int j = 1; j < size-i; j++)
        {
            if (array[j]>array[maxPos])
                maxPos = j;
        }
        if (maxPos!=size-i-1) //最大的元素在最后(升序) 則不需要交換
            Swap(&array[size - 1-i], &array[maxPos]);
    }
}
選擇排序1.png

選擇排序2.png

選擇排序優(yōu)化

void SelectSort_OP(int *array, int size)
{
    int begin = 0;
    int end = size - 1;
    while (begin < end)
    {
        int minPos = begin;
        int maxPos = end;

        //找最大 最小元素位置
        int i = begin + 1;
        while (i <= end)
        {
            if (array[i]>array[maxPos])
                maxPos = i;

            if (array[i] < array[minPos])
                minPos = i;
            i++;
        }
        if (maxPos != end)
            Swap(&array[maxPos], &array[end]);

        //最小的元素有可能在end的位置 需要重新標(biāo)記minPos
        if (minPos == end)
            minPos = maxPos;

        if (minPos != begin)
            Swap(&array[minPos], &array[begin]);

        begin++;
        end--;
    }

}

void TestSelectSort()
{

    int array[] = { 2, 5, 4, 9, 3, 6, 8, 7, 1, 0 };
    SelectSort_OP(array, sizeof(array) / sizeof(array[0]));
}

選擇排序優(yōu)化.png

選擇排序優(yōu)化2.png

冒泡排序

//冒泡排序
void BubbleSort(int *array, int size)
{
    for (int i = 0; i < size - 1; i++)
    {
        for (int j = 0; j < size - i-1; j++)
        {
            if (array[j]>array[j + 1])
                Swap(&array[j], &array[j + 1]);
        }
    }
}

void TestBubbleSort()
{

    int array[] = { 2, 5, 4, 9, 3, 6, 8, 7, 1, 0 };
    BubbleSort(array, sizeof(array) / sizeof(array[0]));
}
冒泡排序1.png

冒泡排序2.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市畅铭,隨后出現(xiàn)的幾起案子梭伐,更是在濱河造成了極大的恐慌湘换,老刑警劉巖医窿,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件磅甩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡姥卢,警方通過查閱死者的電腦和手機(jī)卷要,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)独榴,“玉大人僧叉,你說(shuō)我怎么就攤上這事」桌疲” “怎么了瓶堕?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)掷豺。 經(jīng)常有香客問我捞烟,道長(zhǎng),這世上最難降的妖魔是什么当船? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任题画,我火速辦了婚禮,結(jié)果婚禮上德频,老公的妹妹穿的比我還像新娘苍息。我一直安慰自己,他們只是感情好壹置,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布竞思。 她就那樣靜靜地躺著,像睡著了一般钞护。 火紅的嫁衣襯著肌膚如雪盖喷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天难咕,我揣著相機(jī)與錄音课梳,去河邊找鬼。 笑死余佃,一個(gè)胖子當(dāng)著我的面吹牛暮刃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播爆土,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼椭懊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了步势?” 一聲冷哼從身側(cè)響起氧猬,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤背犯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后狂窑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媳板,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年泉哈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蛉幸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丛晦,死狀恐怖奕纫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烫沙,我是刑警寧澤匹层,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站锌蓄,受9級(jí)特大地震影響升筏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瘸爽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一您访、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧剪决,春花似錦灵汪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至渗鬼,卻和暖如春览露,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背譬胎。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工差牛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人银择。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像累舷,于是被迫代替她去往敵國(guó)和親浩考。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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

  • 概述:排序有內(nèi)部排序和外部排序被盈,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序析孽,而外部排序是因排序的數(shù)據(jù)很大搭伤,一次不能容納全部...
    每天刷兩次牙閱讀 3,732評(píng)論 0 15
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序袜瞬,而外部排序是因排序的數(shù)據(jù)很大怜俐,一次不能容納全部...
    蟻前閱讀 5,186評(píng)論 0 52
  • 概述排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序邓尤,而外部排序是因排序的數(shù)據(jù)很大拍鲤,一次不能容納全部的...
    Luc_閱讀 2,275評(píng)論 0 35
  • “美是非常重要的。美是一種非常深刻的感受汞扎。是比開心季稳、不開心的簡(jiǎn)單情緒更高層面的,近乎哲學(xué)的感受澈魄【笆螅” “美與和平是緊...
    黃虹閱讀 296評(píng)論 2 3
  • 薛寶釵在《紅樓夢(mèng)》中出現(xiàn)以后,作者就很是隨意的在寶釵與周嫂子的閑聊中交代了一味藥方——寶釵因?yàn)樘ド臒岫緹o(wú)法醫(yī)治痹扇,...
    泠泠水潤(rùn)閱讀 2,438評(píng)論 0 3