• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            那誰(shuí)的技術(shù)博客

            感興趣領(lǐng)域:高性能服務(wù)器編程,存儲(chǔ),算法,Linux內(nèi)核
            隨筆 - 210, 文章 - 0, 評(píng)論 - 1183, 引用 - 0
            數(shù)據(jù)加載中……

            [算法問(wèn)題]合并兩個(gè)已經(jīng)排序的數(shù)組為另一個(gè)數(shù)組

            問(wèn)題描述:
            設(shè)子數(shù)組a[0:k]和a[k+1:n-1]已排好序(0<=k<=n-1).試設(shè)計(jì)一個(gè)合并這兩個(gè)子數(shù)組為排好序的數(shù)組a[0:n-1]的算法.要求算法在最壞的情況下所用的計(jì)算時(shí)間為O(n), 且只用到O(1)的輔助空間.

            這一題比較簡(jiǎn)單,看代碼就知道了.

            #include?<stdio.h>

            void?DisplayArray(int?*pArray,?int?nLen)
            {
            ????
            for?(int?i?=?0;?i?<?nLen;?++i)
            ????
            {
            ????????printf(
            "array[%d]?=?%d\n",?i,?pArray[i]);
            ????}

            }


            //?pArray1和pArray2是已經(jīng)排好序的數(shù)組,要求將它們按照順序合并到pArray中
            //?排序之后的數(shù)組不會(huì)有重復(fù)的元素
            void?MergeArray(int?*pArray1,?int?nLen1,?int?*pArray2,?int?nLen2,?int?*pArray)
            {
            ????
            int?i,?j,?n;

            ????i?
            =?j?=?n?=?0;
            ????
            while?(i?<?nLen1?&&?j?<?nLen2)??????????????????//?循環(huán)一直進(jìn)行到拷貝完某一個(gè)數(shù)組的元素為止
            ????{
            ????????
            if?(pArray1[i]?<?pArray2[j])????????????????//?拷貝array1的元素
            ????????{
            ????????????pArray[n
            ++]?=?pArray1[i++];
            ????????}

            ????????
            else?if?(pArray1[i]?>?pArray2[j])????????????//?拷貝array2的元素
            ????????{
            ????????????pArray[n
            ++]?=?pArray2[j++];???????????????????????
            ????????}

            ????????
            else??????????????????????????????????????????//?相等的元素拷貝
            ????????{
            ????????????pArray[n
            ++]?=?pArray2[j++];???????????????????????
            ????????????
            ++i;
            ????????}

            ????}


            ????
            if?(i?==?nLen1)??????????????????????????????//?如果array1已經(jīng)被拷貝完畢就拷貝array2的元素
            ????{
            ????????
            while?(j?<?nLen2)
            ????????????pArray[n
            ++]?=?pArray2[j++];
            ????}

            ????
            else?????????????????????????????????????????//?如果array2已經(jīng)被拷貝完畢就拷貝array1的元素
            ????{
            ????????
            while?(i?<?nLen1)
            ????????????pArray[n
            ++]?=?pArray1[i++];
            ????}

            }


            int?main()
            {???????
            ????
            int?array1[]?=?{1,?4,?5,?7};
            ????
            int?array2[]?=?{2,?3,?6,?8};
            ????
            int?array3[8];
            ????MergeArray(array1,?
            4,?array2,?4,?array3);
            ????printf(
            "Merge?Array:\n");
            ????DisplayArray(array3,?
            8);

            ????
            return?1;
            }


            posted on 2006-09-26 23:27 那誰(shuí) 閱讀(5689) 評(píng)論(6)  編輯 收藏 引用 所屬分類: 算法與數(shù)據(jù)結(jié)構(gòu)

            評(píng)論

            # re: [算法問(wèn)題]合并兩個(gè)已經(jīng)排序的數(shù)組為另一個(gè)數(shù)組  回復(fù)  更多評(píng)論   

            該實(shí)現(xiàn)與題意不合吧, 題目是說(shuō)"設(shè)子數(shù)組a[0:k]和a[k+1:n-1]已排好序(0<=k<=n-1).試設(shè)計(jì)一個(gè)合并這兩個(gè)子數(shù)組為排好序的數(shù)組a[0:n-1]的算法.", 即只有一個(gè)a[]
            2006-09-27 21:30 | elife

            # re: [算法問(wèn)題]合并兩個(gè)已經(jīng)排序的數(shù)組為另一個(gè)數(shù)組  回復(fù)  更多評(píng)論   

            設(shè)計(jì)算法最好參考一下stl,如果不比stl好,就不要拿出來(lái)了

            template <class InputIterator1, class InputIterator2, class OutputIterator>
            OutputIterator merge(InputIterator1 first1, InputIterator1 last1,
            InputIterator2 first2, InputIterator2 last2,
            OutputIterator result) {
            while (first1 != last1 && first2 != last2) {
            if (*first2 < *first1) {
            *result = *first2;
            ++first2;
            }
            else {
            *result = *first1;
            ++first1;
            }
            ++result;
            }
            return copy(first2, last2, copy(first1, last1, result));
            }
            2006-09-28 11:58 | 小明

            # re: [算法問(wèn)題]合并兩個(gè)已經(jīng)排序的數(shù)組為另一個(gè)數(shù)組  回復(fù)  更多評(píng)論   

            是啊,看題意像是要求內(nèi)排序的……
            2006-09-30 09:50 | 廢人

            # re: [算法問(wèn)題]合并兩個(gè)已經(jīng)排序的數(shù)組為另一個(gè)數(shù)組  回復(fù)  更多評(píng)論   

            歸并排序
            2006-10-11 14:53 | 小胡

            # re: [算法問(wèn)題]合并兩個(gè)已經(jīng)排序的數(shù)組為另一個(gè)數(shù)組  回復(fù)  更多評(píng)論   

            大傻逼。題目都沒(méi)看懂
            2008-07-03 10:47 | 網(wǎng)友

            # re: [算法問(wèn)題]合并兩個(gè)已經(jīng)排序的數(shù)組為另一個(gè)數(shù)組  回復(fù)  更多評(píng)論   

            @小胡
            歸并排序的執(zhí)行效率還不及上面高呢!所以應(yīng)該不是歸并排序,再說(shuō)歸并內(nèi)存開(kāi)銷比上面的大!
            2012-06-03 20:41 | 瞎看看
            久久国产乱子伦精品免费午夜| 午夜福利91久久福利| 国产亚洲精品美女久久久| 久久天天躁狠狠躁夜夜avapp| 99久久成人国产精品免费| 久久精品国产99国产电影网| 99久久亚洲综合精品成人| 亚洲午夜久久久| 精品久久久久久中文字幕人妻最新| 亚洲欧美日韩精品久久| 区久久AAA片69亚洲 | 久久精品国产精品亚洲| aaa级精品久久久国产片| 久久性精品| 国产精品久久久久久久久免费| 日本国产精品久久| 国产V亚洲V天堂无码久久久| 精品国产婷婷久久久| 久久国产精品-久久精品| 亚洲精品白浆高清久久久久久| 久久精品国产只有精品2020| yy6080久久| 亚洲&#228;v永久无码精品天堂久久 | 国产午夜精品久久久久九九电影| 日韩AV毛片精品久久久| 国产精品久久久久影院色| 无码伊人66久久大杳蕉网站谷歌 | 色偷偷888欧美精品久久久| 中文国产成人精品久久不卡| 久久久精品日本一区二区三区 | 欧美激情精品久久久久久久九九九 | AAA级久久久精品无码区| 99久久精品费精品国产一区二区| 狠狠色丁香婷婷久久综合| 久久99精品久久久久久不卡| 亚洲狠狠综合久久| 久久久久久免费一区二区三区| 久久99国产乱子伦精品免费| 国产毛片欧美毛片久久久| 亚洲中文字幕无码一久久区| 无码人妻久久一区二区三区 |