实现两有序数组的合并仍为新有序数组,且不对新数组排序的最简单方法

来源:互联网 发布:天纵国际软件 编辑:程序博客网 时间:2024/06/08 11:33

两升序数组

    int a[10]={2,5,6,7,9,10,15,17,20,21};    int b[10]={12,14,16,17,19,22,25,27,28,30};

合并为有序数组后:
这里写图片描述
代码实现:

#include<stdio.h>int main(void){    int a[10]={2,5,6,7,9,10,15,17,20,21};    int b[10]={12,14,16,17,19,22,25,27,28,30};    int c[20];    int i,t,j;    t=j=0;    for(i=0;i<20;)//可以保证c只有20个元素    {        while(((a[t]<=b[j])||(j==10))&&t<=9)            {            c[i]=a[t++];            printf("%d ",c[i++]);            }        while(((b[j]<=a[t])||(t==10))&&j<=9)            {            c[i]=b[j++];            printf("%d ",c[i++]);            }      }}

注意:

  1. 外层循环保证i<20使c只有二十个元素并不能让i再自增
  2. a数组的元素加入到新数组的条件是,a[t]<=b[j] 或b数组已经全部放入前提是t小于10
  3. b数组的元素加入到新数组的条件是,a[t]>=b[j] 或a数组已经全部放入前提是j小于10