组合有序数组 循环删除数组元素

来源:互联网 发布:linux svn添加新项目 编辑:程序博客网 时间:2024/05/19 06:14

/*
    ary1 和 ary2 是两个已排序的数组,其大小分别为n和m
 将ary1和ary2合并为一个有序数组comp_ary
*/
int* CSort::my_compsort(int *ary1,int n,int *ary2,int m)
{
 int i=0,j=0,k=0;

 int * comp_ary=NULL;
 comp_ary=new int[m+n];

 while((i<n) && (j<m))
 {
  if(ary1[i]<ary2[j])
  {
   comp_ary[k++]=ary1[i];
   i++;
  }
  else
  {
   comp_ary[k++]=ary2[j];
   j++;
  }
 }

 if(i>=n)
 {
  for(;j<m;j++)
   comp_ary[k++]=ary2[j];
 }
 else
 {
  for (;i<n;i++)
   comp_ary[k++]=ary1[i];
 }

 return comp_ary;
}

/*
    对于大小为n的数组ary,从编号0开始每隔m个元素循环删除一个元素
 输出为依次删除元素的编号
*/
int* CSort::my_cirldele(int *ary,int n,int m)
{
 int ct=0,i=0,j=0;
 int *fg=NULL;
 fg=new int[n];
 int *del_ary=NULL;
 del_ary=new int[n];

 for(i=0;i<n;i++)
  fg[i]=1;

 while(ct<n)
 {
  while(i<n)
  {
   if(fg[i]==1)
   {
    if(j==0)
    {
     del_ary[ct++]=i;
     fg[i]=0;

     j=m+1;
    }

    j--;
   }

   i++;
  }

  i=0;
 }

 return del_ary;
}

// my_algorithm.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "Sort.h"

#include <iostream>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
 /////////////////////////////////////////////////////
 ////    将两个有序数组合成一个有序数组    ///////////
/* 
 int A[5]={1,3,4,7,9};
 int B[6]={2,3,5,7,8,9};
 int* comp_ary=NULL;

 CSort m_Sort;
 comp_ary=m_Sort.my_compsort(A,5,B,6);

 for(int i=0;i<5+6;i++)
  cout<<comp_ary[i]<<"  ";

 delete []comp_ary;
 comp_ary=NULL;
*/


 /////////////////////////////////////////////////////
 ////////////    周期循环删除数组元素    /////////////
 int *ary=NULL;
 int n=11,m=2;

 CSort m_Sort;
 ary=m_Sort.my_cirldele(ary,n,m);

 for(int i=0;i<n;i++)
  cout<<ary[i]<<" ";

 

 getchar();

 return 0;
}

原创粉丝点击