最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c語言合并兩個已排序數(shù)組的示例(c語言數(shù)組排序)

 更新時間:2014年03月13日 15:46:38   作者:  
如何將兩個已排序數(shù)組合并成一個排序數(shù)組,下面我們給出使用c語言合并兩個已排序數(shù)組的示例,需要的朋友可以參考下

問題:將兩個已排序數(shù)組合并成一個排序數(shù)組

這里先不考慮大數(shù)據(jù)量的情況(在數(shù)據(jù)量很大時不知大家有什么好的思路或方法?),只做簡單數(shù)組的處理。

簡單代碼如下:

說明:之所以把merge函數(shù)定義成返回數(shù)組長度,是因為后續(xù)會有重復數(shù)據(jù)合并功能的merge版本,考慮到接口一致性。

復制代碼 代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int merge(int* ar1, int len1, int* ar2, int len2, int** rtn)
/*++
 DeScription:
    This routine merge two sorted arrays into one sorted array,
    the same values in different arrays will be keeped.

Arguments:
    ar1 - The first sorted array to be merged
    len1 - The num of items in ar1
    ar2 - The second sorted array to be merged
    len2 - The num of items in ar2
    rtn - The caller proviced pointer to get the result array,
        memory allocated for rtn should be free by the caller.

Return Value:
    The num of items in the merge array
--*/
{
    int i=0,j=0,k=0;
    int m=0;
    int* res = NULL;

    if (ar1 == NULL || ar2 == NULL || rtn == NULL) {
        return 0;
    }

    *rtn = (int *)malloc((len1+len2)*sizeof(int));
    if(*rtn == NULL) {
        return 0;
    }
    memset(*rtn, 0, (len1+len2)*sizeof(int));
    res = (int*)*rtn;

    while(i<len1 && j<len2) {
        if (ar1[i]<=ar2[j]) {
            res[k++] = ar1[i++];
        } else {
            res[k++] = ar2[j++];
        }
    }

    while(i<len1) {
        res[k++] = ar1[i++];
    }
    while(j<len2) {
        res[k++] = ar2[j++];
    }

    return  len1+len2;
}

int merge_test()
{
    int a1[] = {0,1,2,5,8,19,34,43,52};
    int a2[] = {1,4,5,12,17,33,42,51,53,65,76};
    int len1 = sizeof(a1)/sizeof(int);
    int len2 = sizeof(a2)/sizeof(int);
    int i = 0, len = 0;
    int* a3 = NULL;
    int* ptr = NULL;

    len = merge(a1, len1, a2, len2, &a3);
    if (a3 == NULL) {
        printf("a3==NULL\n");
        return 1;
    }

    ptr = a3;
    while(i<len) {
        printf("a3[%3d]---->%8d\n", i++, *ptr++);   
    }

    if (a3 != NULL) {
        free(a3);
    }

    return 0;
}

int main(int argc, char* argv[])
{
    merge_test();

    return 0;
}

相關文章

  • while和for可以相互轉換的例子分享

    while和for可以相互轉換的例子分享

    這篇文章主要介紹了while和for可以相互轉換的例子,需要的朋友可以參考下
    2014-02-02
  • C++中Semaphore內核對象用法實例

    C++中Semaphore內核對象用法實例

    這篇文章主要介紹了C++中Semaphore內核對象用法實例,有助于深入了解信號量(Semaphore)的基本用法,需要的朋友可以參考下
    2014-10-10
  • 利用C語言實現(xiàn)簡易版掃雷

    利用C語言實現(xiàn)簡易版掃雷

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易版掃雷,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • 使用C語言如何輸出逆序數(shù)

    使用C語言如何輸出逆序數(shù)

    逆序數(shù)的就是把一個數(shù)倒過來,例如:1234那么它的逆序數(shù)就為4321,我們該如何是實現(xiàn)呢?下面這篇文章主要給大家介紹了關于使用C語言如何輸出逆序數(shù)的相關資料,需要的朋友可以參考下
    2022-01-01
  • C語言實現(xiàn)出棧序列

    C語言實現(xiàn)出棧序列

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)出棧序列,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 使用C++實現(xiàn)Range序列生成器的示例代碼

    使用C++實現(xiàn)Range序列生成器的示例代碼

    在C++編程中,經(jīng)常需要迭代一系列數(shù)字或其他可迭代對象,本文將使用C++來實現(xiàn)一個簡單的Range封裝,文中的示例代碼講解詳細,感興趣的可以了解下
    2023-11-11
  • 基于C語言實現(xiàn)http下載器

    基于C語言實現(xiàn)http下載器

    做OTA升級功能時,我們能直接拿到的往往只是升級包的鏈接,需要我們自己去下載,這時候就需要用到http下載器。本文將利用C語言實現(xiàn)簡單的http下載器,感興趣的可以了解一下
    2022-12-12
  • C++ map與set封裝實現(xiàn)過程講解

    C++ map與set封裝實現(xiàn)過程講解

    set set是一種關聯(lián)式容器,下面這篇文章主要給大家介紹了關于C++中map和set使用的相關資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友可以參考下
    2023-03-03
  • VC判斷進程是否具有administrator權限的方法

    VC判斷進程是否具有administrator權限的方法

    這篇文章主要介紹了VC判斷進程是否具有administrator權限的方法,在Windows應用程序設計中具有一定的實用價值,需要的朋友可以參考下
    2014-10-10
  • c/c++ 利用sscanf進行數(shù)據(jù)拆分操作

    c/c++ 利用sscanf進行數(shù)據(jù)拆分操作

    這篇文章主要介紹了c/c++ 利用sscanf進行數(shù)據(jù)拆分操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論

来凤县| 临武县| 东莞市| 昌吉市| 天峨县| 开封市| 海林市| 招远市| 太仆寺旗| 辽宁省| 诸暨市| 东乡县| 溧阳市| 五峰| 大竹县| 布尔津县| 越西县| 蒲城县| 郧西县| 齐齐哈尔市| 屯昌县| 土默特右旗| 伊宁市| 钟山县| 伊川县| 绥中县| 叙永县| 颍上县| 罗江县| 垦利县| 苗栗县| 淮南市| 通许县| 西安市| 永嘉县| 前郭尔| 新竹市| 舟山市| 临泉县| 绵竹市| 措勤县|