Świąteczny konkurs PC Format zakończony. Zwycięzcy zostali wyłonieni. Zainteresowanych zapraszamy do NEWSA.


Użytkownicy przeglądający ten wątek: 1 gości

[C++] Scalanie dwóch posortowanych tablic

#1
[C++] Scalanie dwóch posortowanych tablic
W c+c++, funkcję która dostaje na
wejściu 2 tablice posortowane niemalejąco T1 i T2 o długościach odpowiednio n1 i n2,
oraz trzecią tablicę T3 o długości n1+n2. Funkcja powinna scalić ciągi liczbowe znajdujące
się w tablicach T1 i T2 w jeden ciąg posortowany niemalejąco, korzystając istotnie z tego,
że scalane ciągi są już posortowane.Jak to zrobić, naprawde nie wiem
 System operacyjny: windows_seven Przeglądarka: chrome
#2
RE: Tablica/scalenie
Na przyszłość proszę lepiej tytułować wątki.
Musisz po prostu poruszać się po obu tablicach i wybierać większy element, po czym przepisywać go do tablicy wynikowej:
Kod:
void scal(int *a, int n1, int *b, int n2, int *c)
{
   for (int i = 0, j = 0, k = 0; i < n1 + n2; i++)
   {
       if (j == n1)
           ; // koniec tablicy a - trzeba przepisać tablicę b
       else if (k == n2)
           ; // koniec tablicy b - trzeba przepisać tablicę a
       else
       {
           // trzeba wybrać większy element spośród a[j] i b[k] i przypisać do c[i], a następnie zwiększyć licznik j albo k
       }
   }
}
Nie odpowiadam na PW, więc proszę nie pisać do mnie.
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#3
RE: [C++] Scalanie dwóch posortowanych tablic
nie działa dla liczb ujemnych i nie do końca spełnia treść zadania
 System operacyjny: windows_seven Przeglądarka: chrome
#4
RE: [C++] Scalanie dwóch posortowanych tablic
W bloku else pomyliłem ciąg nierosnący z niemalejącym - oczywiście trzeba wybrać mniejszą z dwóch liczb.
Nie odpowiadam na PW, więc proszę nie pisać do mnie.
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#5
RE: [C++] Scalanie dwóch posortowanych tablic
a ja tak wykodziłem
Kod:
#include <stdio.h>
#define n_1 4
#define n_2 3

void merge(int tab1[], int tab2[], int tab3[], int len1, int len2)
{
   int amount = len1 + len2;
   int i ;
   int *W1 = tab1, *W2 = tab2, *W3 = tab3;
   int lenx = len1 < len2 ? len1 : len2 ;

  while(len1 && len2){

       if(*W1 == *W2) {
           *W3++ = *W1++;
           *W3++ = *W2++;
           --len1;
           --len2;
          }
       if (*W1 > *W2) {
           *W3++ = *W2++;
           --len2;
       }
       else {
           *W3++ = *W1++;
           --len1;
       }

   }

   if( len1 )
       while (len1){
       *W3++ = *W1++;
       --len1;
   }

   else
       while (len2){
       *W3++ = *W2++;
       --len2;
   }

   for (i = 0; i < amount; ++i)
       printf("%d\t", tab3[i]);
}
int main(int argc, char* argv[])
{
   int tab1[n_1] = { 2, 3,3,5};
   int tab2[n_2] = { -5, 4,9 };
   int tab3[n_1 + n_2];
   merge(tab1, tab2, tab3, n_1, n_2);

   return 0;
}
Mam do ciebie pytanie, jak sprawdzić sprawność kodu, bo mam jeszcze powiedzieć jaka jest jego sprawność(studia Smutek ) podasz sprawność mojego kodu?
 System operacyjny: windows_seven Przeglądarka: chrome
#6
RE: [C++] Scalanie dwóch posortowanych tablic
Chyba masz na myśli złożoność obliczeniową? Jest ona liniowa, a dokładniej O(n1+n2).
Nie odpowiadam na PW, więc proszę nie pisać do mnie.
 System operacyjny: linux_ubuntu Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki ([C++] Scalanie dwóch posortowanych tablic)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Wskażniki do tablic dwuelementowych soul1648 1 1118 25.03.2017, 16:13
Ostatni post: Szachista
  Zmiana tablic połówkami "C" topornik43 1 1338 09.03.2017, 09:22
Ostatni post: Szachista
  [C++] Zwracanie dwóch wartości z funkcji (szukanie w. maksymalnej - tablica) Chudy2000 3 3897 16.06.2016, 08:10
Ostatni post: Szachista

Skocz do:


Wybrane wątki ([C++] Scalanie dwóch posortowanych tablic)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Szukam literatury do nauki VBA ptrick 5 3655 11.08.2016 09:34
Ostatni post: koneton
  [Drools][Java] Problematyczne przeniesienie programu z desktopa na Androida. piotrm54 0 3255 06.08.2016 18:51
Ostatni post: piotrm54
  [C#|WPF] Problem z oknami. Matrix1001 4 3669 29.07.2016 16:43
Ostatni post: Matrix1001
Ściana Code::Blocks - jaki jest najlepszy kompilator do niego? GregTheBlackFox 3 3554 29.07.2016 15:37
Ostatni post: Ajgor
  [C#, WPF] Prośba o pomoc w sprawdzeniu programu. Matrix1001 4 3510 25.07.2016 18:59
Ostatni post: Matrix1001
  Mam kilka pytań na temat zawodu programisty FredixGaming 6 3835 25.07.2016 11:25
Ostatni post: Ajgor
  [C#|WPF] Eventy, sposób kontrolowania ich. dorion300 0 3845 28.06.2016 17:29
Ostatni post: dorion300
  SPOJ Liczby pierwsze piotr92 11 8486 22.06.2016 11:11
Ostatni post: aht
  [C++] Zwracanie dwóch wartości z funkcji (szukanie w. maksymalnej - tablica) Chudy2000 3 3897 16.06.2016 08:10
Ostatni post: Szachista
  [ASM] Prośba o pomoc w napisaniu programu Kierman 10 8855 15.06.2016 19:05
Ostatni post: Szachista
  [Python] Wyznaczanie mediany MatGpu 1 3959 15.06.2016 09:20
Ostatni post: Szachista
  [C++] Problem z algorytmem A* markiet 7 4878 10.06.2016 09:53
Ostatni post: Szachista
Ściana powiększanie tablicy 2d za pomocą realloc wsadx 1 4230 31.05.2016 12:05
Ostatni post: Szachista
  Baza danych w accessie Bernkow 1 3834 31.05.2016 08:37
Ostatni post: koneton
  Książki do administracji baz danych? Cixi 3 4102 26.05.2016 22:24
Ostatni post: Cixi