void arraymerge(int *arr1, int size1, int *arr2, int size2, int *arrout, int *sizeout)
{
int i_start = 0;
int j_start = 0;
int k_start = 0;
int i_end = size1 -1;
int j_end = size2 -1;
int k_end = size1+size2 -1;
int k_end_value = 0;
bool flag_start = false;
bool flag_end = false;
while((i_start-1) < (i_end+1) && (j_start-1) < (j_end+1)){
/* printf("arr1[%d]=%d, arr2[%d]=%d, arrout[%d]=%d,\n",
i_start, arr1[i_start], j_start,arr2[j_start],
k_start, arrout[k_start]);*/
(flag_start = (arr1[i_start]<= arr2[j_start])) ? (arrout[k_start]=arr1[i_start]) : (arrout[k_start]=arr2[j_start]);
if(flag_start){
i_start++;
}else{
j_start++;
}
if( (k_start>=1) && (arrout[k_start] == arrout[k_start-1])){
}else{
k_start++;
}
/* printf("end arr1[%d]=%d, arr2[%d]=%d, arrout[%d]=%d,\n",
i_start, arr1[i_start], j_start,arr2[j_start],
k_start-1, arrout[k_start-1]);
printf("end arr1[%d]=%d, arr2[%d]=%d, arrout[%d]=%d,k_end_value=%d\n",
i_end, arr1[i_end], j_end,arr2[j_end],
k_end, arrout[k_end],k_end_value);
*/
(flag_end = arr1[i_end]>= arr2[j_end]) ? (arrout[k_end] = arr1[i_end]) : (arrout[k_end] = arr2[j_end]);
if(flag_end){
i_end--;
}else{
j_end--;
}
if((k_end_value >= 1) && (arrout[k_end] == arrout[k_end+1])){
}else{
k_end--;
k_end_value++;
}
/*printf("end end arr1[%d]=%d, arr2[%d]=%d, arrout[%d]=%d,k_end_value=%d\n---------------\n",
i_end, arr1[i_end], j_end,arr2[j_end],
k_end+1, arrout[k_end+1],k_end_value);*/
}
// printf("i_satr%d, i_end=%d, j_start=%d, j_end=%d, k_start=%d, k_end=%d\n", i_start, i_end,
// j_start, j_end, k_start, k_end);
if((i_start-1 )>= (i_end+1))
{
while(j_start <= j_end){
arrout[k_start]=arr2[j_start];
j_start++;
if( (k_start>=1) && (arrout[k_start] == arrout[k_start-1])){
}else{
k_start++;
}
}
}
if((j_start-1) >= (j_end +1) )
{
while(i_start <= i_end){
arrout[k_start]=arr1[i_start];
i_start++;
if( (k_start>=1) && (arrout[k_start] == arrout[k_start-1])){
}else{
k_start++;
}
}
}
for(int i = 0; i <k_end_value; i++ ){
arrout[k_start] = arrout[k_end+1+i];
if( (k_start < 1) || (arrout[k_start] != arrout[k_start-1])){
k_start++;
}
}
*sizeout=k_start;
return;
}
int main () {
int arr1[] = {1, 1, 1, 2, 3, 5,5,5 ,6,6,300,301,302} ;
int arr2[] = {0,2, 4, 4, 4, 5, 7,7,7,7,7, 150 } ;
//int res : [ 1, 2, 3, 4, 5, 150 ]
//int arr1[] = {1, 2, 3, 4,5,6,7 } ;
//int arr2[] = {1, 2, 3, 4,5,6,7 } ;
int size1 = sizeof(arr1)/sizeof(arr1[0]);
int size2 = sizeof(arr2)/sizeof(arr2[0]);
int size3 = size1 + size2;
int arrout[100]= {0};
int sizeout = 0;
printf("size1=%d, size2=%d, size3=%d \n", size1, size2, size3);
arraymerge(arr1, size1, arr2, size2, arrout, &sizeout);
printf("sizeout = %d \n", sizeout);
for(int i = 0; i< sizeout; i++)
{
printf(" %d ", arrout[i]);
}
printf("\n");
return 0;
}