在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

排序算法之歸并排序講解

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

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

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

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

我們先來看下合并。

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

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

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

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

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

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

這個過程就是合并。

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

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

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

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

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

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

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

如果一個數(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;


    //隨機產(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ù)越多,順序越亂,效率越高。

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




審核編輯:劉清

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

    關注

    1

    文章

    33

    瀏覽量

    11487
  • printf函數(shù)

    關注

    0

    文章

    31

    瀏覽量

    5902

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

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

收藏 人收藏

    評論

    相關推薦

    FPGA排序-冒泡排序介紹

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

    十大排序算法總結

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

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

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

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

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

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

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

    C語言教程之歸并排序

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

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

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

    常用排序算法分析

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

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

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

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

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

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

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

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

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

    排序算法歸并算法”介紹

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

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

    典型的排序算法包括冒泡排序、選擇排序、插入排序歸并排序、快速
    的頭像 發(fā)表于 03-21 10:28 ?661次閱讀
    用FPGA實現(xiàn)雙調<b class='flag-5'>排序</b>的方法(2)
    主站蜘蛛池模板: 精品视频一区在线观看| 久久看免费视频| aaa在线观看| 天天干人人| 国产久爱青草视频在线观看| 欧美亚洲天堂| 四虎影视大全免费入口| 国产紧缚jvid| 人人插人人草| 日本特黄特色视频| 美女被曹| 欧美日操| 特黄十八岁大片| 天天摸天天看天天爽| 最新看片网址| 91色在线观看| 国产精品你懂得| 激情综合五月| 激情亚洲| 在线干| 78摸在线| 色成人综合网| 久久亚洲国产视频| 欧美性区| 一区| 嫩草网| 狠狠操狠狠摸| free性欧美video69| avbobo官网在线入口| 久久99热不卡精品免费观看| 国产区亚洲区| 一级片aaaaaa| 五月婷婷久久综合| 四虎永久影院| 欧美一区二区视频| 久久综合丁香| 国模人体一区二区三区| 国产免费久久精品| 天天插天天搞| xyx性爽欧美视频| 性色免费视频|