色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

排序算法之歸并排序講解

學益得智能硬件 ? 來源:學益得智能硬件 ? 2023-03-06 11:32 ? 次閱讀

今天我們繼續來講排序算法,歸并排序,難度一般,但是效率也還不錯。

老規矩,先搞清楚原理,再寫代碼。

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

我們先來看下合并。

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

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

這個操作應該極其簡單。兩個下標,一塊新的內存。

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

2和3比較,2小,把2放在內存中,y向后走。

下面依次把4和5放進去,最后x達到了末尾,y變成了6的下標,那就把y后面的數據全部放進去就行。

這個過程就是合并。

那么問題又來了,去哪找兩個有序的數組。

這個就需要對數組做拆分。

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

比如數組有8個元素,我們先從中間拆開,得到兩個數組,每個4個元素。

但是這兩個數組也不是有序的,于是對兩個數組繼續拆分。

左邊是兩個數組,每個數組兩個元素,右邊也一樣。

這樣還不夠,繼續拆分,最后得到的數組只有一個元素。

如果一個數組只有一個元素,那么它一定就是有序的。

這個過程就需要用到遞歸。

過程清楚了,下面就是用代碼來實現它。

#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;


    //隨機產生數組
    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;
}
歸并排序難度不大,但是和堆排序一樣,數據越多,順序越亂,效率越高。

當然,歸并排序的缺點就是,需要更多的內存空間。




審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • MID
    MID
    +關注

    關注

    1

    文章

    40

    瀏覽量

    11629
  • printf函數
    +關注

    關注

    0

    文章

    31

    瀏覽量

    6071

原文標題:排序算法之歸并排序

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏

    評論

    相關推薦
    熱點推薦

    FPGA排序-冒泡排序介紹

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

    十大排序算法總結

    排序算法是最經典的算法知識。因為其實現代碼短,應該廣,在面試中經常會問到排序算法及其相關的問題。一般在面試中最常考的是快速
    的頭像 發表于 12-20 10:39 ?1423次閱讀

    嵌入式stm32實用的排序算法 - 交換排序

    :插入排序、選擇排序、交換排序歸并排序、基數排序排序的分類大致為如下圖:在內部
    發表于 04-12 13:14

    各種排序算法的時間空間復雜度、穩定性

    各種排序算法的時間空間復雜度、穩定性一、排序算法分類:二、排序算法比較:注:1、
    發表于 12-21 07:48

    介紹幾種常用的排序算法C實現

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

    C語言教程之歸并排序

    C語言教程之歸并排序,很好的C語言資料,快來學習吧。
    發表于 04-22 11:06 ?0次下載

    C語言教程之幾種排序算法

    數據結構的排序算法有很多種。 其中, 快速排序 、希爾排序、堆排序、直接選擇排序不是穩定的
    發表于 11-16 10:23 ?1836次閱讀

    常用排序算法分析

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

    排序算法分享:歸并排序說明

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

    如何去實現并驗證一種歸并排序

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

    解析數據結構的常用七大排序算法

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

    隨機數字排序教程

    本次實驗我們利用對隨機數字進行排序來給大家介紹排序算法的實現,常見的快速排序歸并排序、堆排序
    的頭像 發表于 03-24 14:55 ?1153次閱讀
    隨機數字<b class='flag-5'>排序</b>教程

    排序算法歸并算法”介紹

    在說這個題目之前先來說說一個排序算法歸并算法歸并算法采取思想是分治思想,分治思想簡單說就
    的頭像 發表于 05-22 10:03 ?851次閱讀
    <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)是利用歸并的思想實現的排序方法,該算法采用經典的分治策略,即分為兩步:分與治。 分
    的頭像 發表于 10-11 15:49 ?919次閱讀
    <b class='flag-5'>排序</b><b class='flag-5'>算法</b>有哪些

    用FPGA實現雙調排序的方法(2)

    典型的排序算法包括冒泡排序、選擇排序、插入排序歸并排序、快速
    的頭像 發表于 03-21 10:28 ?887次閱讀
    用FPGA實現雙調<b class='flag-5'>排序</b>的方法(2)
    主站蜘蛛池模板: 真人女人无遮挡内谢免费视频% | 日本久久久久亚洲中字幕 | 俄罗斯女人Z0ZOZO| 国产成人自拍视频在线观看 | 91精品国产高清久久久久久 | 国产精片久久久久久婷婷 | 亚洲国产成人99精品激情在线 | 91精品欧美一区二区三区 | 国产不卡视频在线 | 99久久99久久免费精品蜜桃 | 色哟哟网站入口在线观看视频 | a一级一片免费观看视频 | 玩弄人妻少妇500系列网址 | 久久黄色片 | 接吻吃胸摸下面啪啪教程 | 免费无码又爽又黄又刺激网站 | 含羞草传媒在线观看 | 亚洲国产精品嫩草影院 | 99在线在线视频观看 | 婷婷射精AV这里只有精品 | 97人人超碰国产精品最新蜜芽 | 99久久全国免费久久爱 | 草莓AV福利网站导航 | 99在线国产视频 | 欧美雌雄双性人交xxxx | aaa在线观看视频高清视频 | 久久er国产免费精品 | 4虎影院午夜在线观看 | 色色激情网 | 亚洲女人毛片 | 精品久久久久久久国产潘金莲 | 成年人免费在线视频观看 | 99久久国产综合精品网成人影院 | 男人免费网站 | 欧美成人精品高清在线观看 | 又黄又爽又无遮挡在线观看免费 | 国产AV精品国语对白国产 | 99免费在线观看视频 | 国产亚洲精品久久无码98 | 亚洲1卡二卡3卡4卡新区在线 | 亚洲欧美精品无码一区二在线 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品