女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

排序算法之歸并排序講解

學(xué)益得智能硬件 ? 來(lái)源:學(xué)益得智能硬件 ? 2023-03-06 11:32 ? 次閱讀

今天我們繼續(xù)來(lái)講排序算法,歸并排序,難度一般,但是效率也還不錯(cuò)。

老規(guī)矩,先搞清楚原理,再寫(xiě)代碼。

歸并排序分為兩個(gè)步驟,先是拆分,然后再合并。

我們先來(lái)看下合并。

假設(shè)有兩個(gè)有序的數(shù)組,一個(gè)是1、3、5,一個(gè)是2、4、6、8,把他們合并成一個(gè)有序的數(shù)組。

39d04f70-bbcc-11ed-bfe3-dac502259ad0.png ?

這個(gè)操作應(yīng)該極其簡(jiǎn)單。兩個(gè)下標(biāo),一塊新的內(nèi)存。

1和2比較,1小,把1放在新的內(nèi)存中,x向后走。

2和3比較,2小,把2放在內(nèi)存中,y向后走。

下面依次把4和5放進(jìn)去,最后x達(dá)到了末尾,y變成了6的下標(biāo),那就把y后面的數(shù)據(jù)全部放進(jìn)去就行。

這個(gè)過(guò)程就是合并。

那么問(wèn)題又來(lái)了,去哪找兩個(gè)有序的數(shù)組。

這個(gè)就需要對(duì)數(shù)組做拆分。

3a1b5560-bbcc-11ed-bfe3-dac502259ad0.png ?

比如數(shù)組有8個(gè)元素,我們先從中間拆開(kāi),得到兩個(gè)數(shù)組,每個(gè)4個(gè)元素。

但是這兩個(gè)數(shù)組也不是有序的,于是對(duì)兩個(gè)數(shù)組繼續(xù)拆分。

左邊是兩個(gè)數(shù)組,每個(gè)數(shù)組兩個(gè)元素,右邊也一樣。

這樣還不夠,繼續(xù)拆分,最后得到的數(shù)組只有一個(gè)元素。

如果一個(gè)數(shù)組只有一個(gè)元素,那么它一定就是有序的。

這個(gè)過(guò)程就需要用到遞歸。

過(guò)程清楚了,下面就是用代碼來(lái)實(shí)現(xiàn)它。

#include 
#include 
#include 


#define SIZE     100000


void merge(int *a, int start, int mid, int end)
{
    int left_len = mid - start + 1;
    int right_len = end - mid;


    int *L = (int *)malloc(sizeof(int) * left_len);
    int *R = (int *)malloc(sizeof(int) * right_len);


    int i, k = start, j;
    for (i = 0; i < left_len; i++, k++)
    {
        L[i] = a[k];
    }


    for (i = 0; i < right_len; i++, k++)
    {
        R[i] = a[k];
    }


    for (i = 0, j = 0, k = start; i < left_len && j < right_len; k++)
    {
        if (L[i] > R[j])
        {
            a[k] = R[j++];
        }
        else
        {
            a[k] = L[i++];
        }
    }


    if (i < left_len)
    {
        for (; i < left_len; i++, k++)
        {
            a[k] = L[i];
        }
    }


    if (j < right_len)
    {
        for (; j < right_len; j++, k++)
        {
            a[k] = R[j];
        }
    }


    free(L);
    free(R);
}


void merge_sort(int *a, int start, int end)
{
    if (start >= end)
        return;


    int mid = (end + start) / 2;


    merge_sort(a, start, mid);
    merge_sort(a, mid + 1, end);


    merge(a, start, mid, end);
}


int main()
{
    int num, arr[SIZE] = {0}, i;


    //隨機(jī)產(chǎn)生數(shù)組
    srand(time(NULL));
    for (i = 0; i < SIZE; i++)
    {
        arr[i] = rand() % 100;
    }


    merge_sort(arr, 0, SIZE - 1);


    for (i = 0; i < SIZE; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("
");


    return 0;
}
歸并排序難度不大,但是和堆排序一樣,數(shù)據(jù)越多,順序越亂,效率越高。

當(dāng)然,歸并排序的缺點(diǎn)就是,需要更多的內(nèi)存空間。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • MID
    MID
    +關(guān)注

    關(guān)注

    1

    文章

    40

    瀏覽量

    11629
  • printf函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    31

    瀏覽量

    6071

原文標(biāo)題:排序算法之歸并排序

文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    FPGA排序-冒泡排序介紹

    排序算法是圖像處理中經(jīng)常使用一種算法,常見(jiàn)的排序算法有插入排序、希爾
    發(fā)表于 07-17 10:12 ?1290次閱讀
    FPGA<b class='flag-5'>排序</b>-冒泡<b class='flag-5'>排序</b>介紹

    十大排序算法總結(jié)

    排序算法是最經(jīng)典的算法知識(shí)。因?yàn)槠鋵?shí)現(xiàn)代碼短,應(yīng)該廣,在面試中經(jīng)常會(huì)問(wèn)到排序算法及其相關(guān)的問(wèn)題。一般在面試中最常考的是快速
    的頭像 發(fā)表于 12-20 10:39 ?1422次閱讀

    嵌入式stm32實(shí)用的排序算法 - 交換排序

    :插入排序、選擇排序、交換排序歸并排序、基數(shù)排序排序的分類(lèi)大致為如下圖:在內(nèi)部
    發(fā)表于 04-12 13:14

    各種排序算法的時(shí)間空間復(fù)雜度、穩(wěn)定性

    各種排序算法的時(shí)間空間復(fù)雜度、穩(wěn)定性一、排序算法分類(lèi):二、排序算法比較:注:1、
    發(fā)表于 12-21 07:48

    介紹幾種常用的排序算法C實(shí)現(xiàn)

    文章目錄1、冒泡排序法2、選擇排序3、插入排序4、快速排序(快排)5、歸并排序1、冒泡排序
    發(fā)表于 12-21 06:31

    C語(yǔ)言教程之歸并排序

    C語(yǔ)言教程之歸并排序,很好的C語(yǔ)言資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-22 11:06 ?0次下載

    C語(yǔ)言教程之幾種排序算法

    數(shù)據(jù)結(jié)構(gòu)的排序算法有很多種。 其中, 快速排序 、希爾排序、堆排序、直接選擇排序不是穩(wěn)定的
    發(fā)表于 11-16 10:23 ?1836次閱讀

    常用排序算法分析

    一種是比較排序,時(shí)間復(fù)雜度O(nlogn) ~ O(n^2),主要有:冒泡排序,選擇排序,插入排序歸并排序,堆
    的頭像 發(fā)表于 07-13 16:13 ?2322次閱讀

    排序算法分享:歸并排序說(shuō)明

    我們今天繼續(xù)給大家分享排序算法里面的另外一種排序算法歸并排序
    的頭像 發(fā)表于 12-24 14:34 ?905次閱讀

    如何去實(shí)現(xiàn)并驗(yàn)證一種歸并排序

    歸并排序的核心思想是:利用分治策略,不斷劃分子序列直到不能劃分為止,此時(shí)各個(gè)子序列是有序的,合并相鄰有序子序列最終得到一個(gè)有序序列。
    的頭像 發(fā)表于 06-23 14:29 ?1691次閱讀
    如何去實(shí)現(xiàn)并驗(yàn)證一種<b class='flag-5'>歸并排序</b>?

    解析數(shù)據(jù)結(jié)構(gòu)的常用七大排序算法

    為了讓大家掌握多種排序方法的基本思想,本篇文章帶著大家對(duì)數(shù)據(jù)結(jié)構(gòu)的常用七大算法進(jìn)行分析:包括直接插入排序、希爾排序、冒泡排序、快速
    的頭像 發(fā)表于 03-16 08:22 ?1896次閱讀

    隨機(jī)數(shù)字排序教程

    本次實(shí)驗(yàn)我們利用對(duì)隨機(jī)數(shù)字進(jìn)行排序來(lái)給大家介紹排序算法的實(shí)現(xiàn),常見(jiàn)的快速排序歸并排序、堆排序
    的頭像 發(fā)表于 03-24 14:55 ?1151次閱讀
    隨機(jī)數(shù)字<b class='flag-5'>排序</b>教程

    排序算法歸并算法”介紹

    在說(shuō)這個(gè)題目之前先來(lái)說(shuō)說(shuō)一個(gè)排序算法歸并算法歸并算法采取思想是分治思想,分治思想簡(jiǎn)單說(shuō)就
    的頭像 發(fā)表于 05-22 10:03 ?850次閱讀
    <b class='flag-5'>排序</b><b class='flag-5'>算法</b><b class='flag-5'>之</b>“<b class='flag-5'>歸并</b><b class='flag-5'>算法</b>”介紹

    排序算法有哪些

    1. 歸并排序(遞歸版) 歸并排序(MERGE-SORT)是利用歸并的思想實(shí)現(xiàn)的排序方法,該算法采用經(jīng)典的分治策略,即分為兩步:分與治。 分
    的頭像 發(fā)表于 10-11 15:49 ?918次閱讀
    <b class='flag-5'>排序</b><b class='flag-5'>算法</b>有哪些

    用FPGA實(shí)現(xiàn)雙調(diào)排序的方法(2)

    典型的排序算法包括冒泡排序、選擇排序、插入排序歸并排序、快速
    的頭像 發(fā)表于 03-21 10:28 ?887次閱讀
    用FPGA實(shí)現(xiàn)雙調(diào)<b class='flag-5'>排序</b>的方法(2)