webForumDet fria alternativet

sortera två arrayer - fel

C/C++ur C/C++

2 svar · 322 visningar · startad av axed

axedMedlem sedan nov. 200136 inlägg
#1

Hej!
Jag vill lägga ihop två redan sorterade arrayer till en stor sorterad array...koden följer nedan:

#include <stdio.h>
#define N 5
#define M 7

void sort_cat(int *a, int an, int *b, int bn, int *res);

main(){

   int i;
   int a\[N\] = { 12, 42, 63, 65, 81};
   int b\[M\] = { 21, 62, 64, 66, 70, 75, 80};
   int res\[N+M\];

   sort_cat(a, N, b, M, res);

   for(i=0; i\<N+M; i++){
            printf("\\n%d ", res);
   }

   getchar();
   return 0;

}

void sort_cat(int *a, int an, int *b, int bn, int *res){

 int i=0, j=0;

 do{
    if(\*a\<\*b){
               \*res = \*a;
               res++;
               a++;
               i++;
    }
    else{
         \*res = \*b;
         res++;
         b++;
         j++;
    }
  }
  while(i\<an &#0124;&#0124; j\<bn);

  if(i==an){
            do{
               \*res = \*b;
               res++;
               b++;
               j++;
             }
             while(j\<bn);
  }

  if(j==bn){
            do{
               \*res = \*a;
               res++;
               a++;
               i++;
            }
            while(i\<an);
  }

}

Detta fungerar bra så länge sista positionen i array a[] är större än sista positionen i array b[].
Men byter jag plats på de två sista positionerna i de bägge arrayerna, kommer inte , 81 i det här fallet, med. Utan programmet skriver ut -1 istället..
Varför?
Förslag till lösning?
Tack!

axedMedlem sedan nov. 200136 inlägg
#2

Har fixat det själv...

BeatboxMedlem sedan okt. 20013 217 inlägg
#3

Ett bra tips är ju att använda sig av STL så slipper man "uppfinna hjulet" varje gång.

// BeatBox

------------------
"Mörkrets gärningar, förekommer även på dagen"

Sixten Landby

146 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
143 ms — hämta tråd, inlägg och bilagor (db)