• 【合并两个有序的子数组】算法实现


    【合并两个有序的子数组】
     
    View Code
     1 #include<iostream.h>
     2 void merge(int array[],int p,int q,int r,int m);
     3 void print(int array[],int n);
     4 //void sort_merge();
     5 void main()
     6 {
     7     int arr[15]=
     8     {
     9         2,1,3,14,25,
    10         4,11,15,22,24,
    11         6,10,17,20,30
    12     };
    13     merge(arr,1,4,9,9);
    14     print(arr,15);
    15 }
    16 /****************************************************************
    17 *输入:整数数组array[],下标p,q,r,元素个数m。array[p]~array[q]
    18 *      及array[q+1]~array[r]已按递增顺序排序
    19 *输出:按递增排序的子数组array[p]~array[r]
    20 *****************************************************************/
    21 void merge(int array[],int p,int q,int r,int m)
    22 {
    23     int* bp=new int[m];
    24     int i,j,k;
    25     i=p;j=q+1;k=0;
    26     //逐一判断两子数组的元素,按两种情况,把小的元素复制到缓冲区
    27     while(i<=q&&j<=r)
    28     {
    29         if(array[i]<=array[j])
    30         {
    31             bp[k++]=array[i++]; 
    32         }
    33         else
    34         {
    35             bp[k++]=array[j++]; 
    36         }
    37     }
    38     //cout<<endl;
    39     //按两种情况处理剩余元素
    40     if(i==q+1)
    41     {
    42         //for(;j<=r;)
    43         while(j<=r)
    44         {
    45             bp[k++]=array[j++];//把array[j]~array[r]复制到缓冲区
    46         }
    47     }
    48     else
    49     {
    50         while(i<=q)
    51         { 
    52             bp[k++]=array[i++];//把array[i]~array[q]复制到缓冲区        
    53         }
    54         
    55     }
    56 
    57     k=0;
    58     i=p;
    59     while(i<=r)
    60     //for(i=p;i<=r;)//最后把数组bp的内容复制到array[p]~array[r]
    61     { 
    62         array[i++]=bp[k++];
    63     }
    64  
    65     delete bp;
    66 }
    67 void print(int array[],int n)
    68 {
    69     for(int i=0;i<n;i++)
    70     {
    71         if(i%5==0&&i!=0)
    72         {
    73             cout<<"\n";
    74         }
    75         cout<<array[i]<<"  ";
    76     }
    77     cout<<endl;
    78 }

     运行结果:

  • 相关阅读:
    Linux操作篇之配置Samba
    Chrome扩展实现网页图片右键上传(以E站图片搜索为例)
    Linux开机自动挂载NFS配置的一个误区
    ffmpeg指令解读海康威视摄像头
    linux服务器性能调优之tcp/ip性能调优
    多线程程序设计中的8条简单原则
    初识文件系统
    socket中的listen到底干了哪些事情?
    ip面向无连接?TCP面向连接?HTTP连接方式?
    网络层和数据链层的区别
  • 原文地址:https://www.cnblogs.com/wintergrass/p/2000046.html
Copyright © 2020-2023  润新知