Poznaliśmy zwycięzców Wakacyjnego Konkursu PC Format! Gratulujemy wszystkim zainteresowanym oraz zapraszamy do TEMATU


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 2589 25.03.2017, 16:13
Ostatni post: Szachista
  Zmiana tablic połówkami "C" topornik43 1 2571 09.03.2017, 09:22
Ostatni post: Szachista
  [C++] Zwracanie dwóch wartości z funkcji (szukanie w. maksymalnej - tablica) Chudy2000 3 4407 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
  SPOJ Liczby pierwsze piotr92 11 9367 22.06.2016 11:11
Ostatni post: aht
  [C++] Zwracanie dwóch wartości z funkcji (szukanie w. maksymalnej - tablica) Chudy2000 3 4407 16.06.2016 08:10
Ostatni post: Szachista
  [ASM] Prośba o pomoc w napisaniu programu Kierman 10 9637 15.06.2016 19:05
Ostatni post: Szachista
  [Python] Wyznaczanie mediany MatGpu 1 4525 15.06.2016 09:20
Ostatni post: Szachista
  [C++] Problem z algorytmem A* markiet 7 5382 10.06.2016 09:53
Ostatni post: Szachista
Ściana powiększanie tablicy 2d za pomocą realloc wsadx 1 4756 31.05.2016 12:05
Ostatni post: Szachista
  Baza danych w accessie Bernkow 1 4275 31.05.2016 08:37
Ostatni post: koneton
  Książki do administracji baz danych? Cixi 3 4574 26.05.2016 22:24
Ostatni post: Cixi
  Gra platformowa 2D ( widok z boku ), tylko dla treningu aht 5 4802 25.05.2016 07:56
Ostatni post: aht
  Gra MMO. Od czego zacząć? sobik 6 5057 24.05.2016 14:48
Ostatni post: Ajgor
Ściana Spacja w skypcie .bat KrzyniuTV 2 6057 21.05.2016 08:06
Ostatni post: KrzyniuTV
  Jaka książka na zbędne wykłady na których trzeba być? Dreamer1x6xX 14 10830 20.05.2016 21:05
Ostatni post: Ajgor
  Skomplikowana formuła na wyliczanie kosztów produkcji - Excel geekboy68k 4 4676 19.05.2016 17:10
Ostatni post: ptrick
Ściana Microsoft Excel - Formuły do zadań dawid081 1 4297 19.05.2016 08:53
Ostatni post: Szachista
  Przekazywanie wskaźnika przez referencję w Qt Trojan3000 1 4233 18.05.2016 19:16
Ostatni post: Szachista