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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取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

    文章

    33

    瀏覽量

    11481
  • printf函數
    +關注

    關注

    0

    文章

    31

    瀏覽量

    5894

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

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

收藏 人收藏

    評論

    相關推薦

    FPGA排序-冒泡排序介紹

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

    十大排序算法總結

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

    嵌入式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 ?1762次閱讀

    常用排序算法分析

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

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

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

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

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

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

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

    隨機數字排序教程

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

    排序算法歸并算法”介紹

    在說這個題目之前先來說說一個排序算法歸并算法歸并算法采取思想是分治思想,分治思想簡單說就
    的頭像 發表于 05-22 10:03 ?665次閱讀
    <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 ?617次閱讀
    <b class='flag-5'>排序</b><b class='flag-5'>算法</b>有哪些

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

    典型的排序算法包括冒泡排序、選擇排序、插入排序歸并排序、快速
    的頭像 發表于 03-21 10:28 ?647次閱讀
    用FPGA實現雙調<b class='flag-5'>排序</b>的方法(2)
    主站蜘蛛池模板: 久久精品无码人妻无码AV蜜臀| 一区二区三区毛AAAA片特级| 日日干夜夜艹| 亚洲精品久久久久AV无码林星阑 | 挺弄抽插喷射HH| younv 学生国产在线视频| 久久丫线这里只精品| 一边喂奶一边做边爱| 果冻传媒妈妈要儿子| 窝窝午夜色视频国产精品东北| YELLOW视频在线观看最新| 午夜男女爽爽羞羞影院在线观看| 出租屋交换人妻 全文| 暖暖在线观看播放视频| 在线观看国产区| 好嗨哟在线看片免费| 亚久久伊人精品青青草原2020| 国产精品麻豆a啊在线观看| 日日噜噜噜夜夜爽爽狠狠图片| WWW国产精品人妻一二三区| 欧美激情性AAAAA片欧美| sm主人调教揉花蒂H| 亚洲va精品中文字幕| 黄色免费在线网址| 一本之道高清在线观看一区| 嫩草成人影院| qvod激情图片| 亚洲精品视频在线观看免费| 嘿嘿视频在线观看 成人| np高h肉辣一女多男| 幺妹视频福利视频| 天天久久狠狠色综合| 男欢女爱免费视频| GOGOGO高清免费播放| 日本午夜福利无码高清| 国产Av男人的天堂精品良久| 色欲精品国产AV久久久| 国产午夜在线精品三级a午夜电影 国产午夜在线观看视频播放 | 国产手机在线精品| xiao776唯美清纯| 在线AV国产传媒18精品免费|