Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > [算法问题]合并两个已经排序的数组为另一个数组
【标  题】:[算法问题]合并两个已经排序的数组为另一个数组
【关键字】:
【来  源】:http://www.cppblog.com/converse/archive/2006/09/26/13006.html

[算法问题]合并两个已经排序的数组为另一个数组

Your Ad Here C++博客 - 创系的技术博客 - [算法问题]合并两个已经排序的数组为另一个数组
有勇气来改变可以改变的事情,有胸怀来接受不可改变的事情,有智慧来分辨两者的不同。
问题描述:
设子数组a[0:k]和a[k+1:n-1]已排好序(0<=k<=n-1).试设计一个合并这两个子数组为排好序的数组a[0:n-1]的算法.要求算法在最坏的情况下所用的计算时间为O(n), 且只用到O(1)的辅助空间.

这一题比较简单,看代码就知道了.

#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是已经排好序的数组,要求将它们按照顺序合并到pArray中
//?排序之后的数组不会有重复的元素
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)??????????????????//?循环一直进行到拷贝完某一个数组的元素为止
????{
????????
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已经被拷贝完毕就拷贝array2的元素
????{
????????
while?(j?<?nLen2)
????????????pArray[n
++]?=?pArray2[j++];
????}

????
else?????????????????????????????????????????//?如果array2已经被拷贝完毕就拷贝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 创系 阅读(60) 评论(1)  编辑 收藏 收藏至365Key 所属分类: 算法与数据结构
【相关文章】
没有相关文章
【相关评论】
没有相关评论
【发表评论】
姓名:
邮件:
随机码*
评论*
      
|  首 页  |  版权声明  |  联系我们   |  网站地图  |
CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.