Witamy na forum PC Format Zapraszamy do REJESTRACJI


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
       }
   }
}
 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.
 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).
 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 6717 25.03.2017, 16:13
Ostatni post: Szachista
  Zmiana tablic połówkami "C" topornik43 1 6392 09.03.2017, 09:22
Ostatni post: Szachista
  [C++] Zwracanie dwóch wartości z funkcji (szukanie w. maksymalnej - tablica) Chudy2000 3 8232 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
  Proszę o pomoc w uzupełnieniu ankiety dt. Zawodu Programisty MaleMonki 0 979 17.11.2019 12:47
Ostatni post: MaleMonki
  Spring framework – jakie strony polecacie do nauki? olek23 5 3431 15.11.2019 15:57
Ostatni post: Alsenas
  Programowanie windy (problem) w C++ mysza2323 2 2139 06.11.2019 23:04
Ostatni post: mysza2323
  Programy w C ~Anonim 1 2576 22.10.2019 17:48
Ostatni post: Szachista
  Książki do nauki C# olek23 14 10134 17.10.2019 13:06
Ostatni post: Ajgor
  Wyświetlanie informacji z bazy danych na stronie www PitPlay 1 3632 16.09.2019 11:18
Ostatni post: Ajgor
  Błąd przy uruchamianiu programu w Java z wiersza poleceń Physicist 3 2521 30.08.2019 14:16
Ostatni post: Physicist
  Python z wiersza poleceń Physicist 15 12196 21.08.2019 20:14
Ostatni post: Physicist
  Transfer plików via FTP Visual Basic FireBytes 3 5578 15.08.2019 07:41
Ostatni post: Szachista
  Menu wysuwane z boku patryk67 1 4317 07.08.2019 12:43
Ostatni post: aht
  Visual Basic Excel l.całkowitą przedstawić w postaci szesnastkowej fugaz 4 6050 18.06.2019 21:36
Ostatni post: fugaz
  Nauka do Olimpiady Informatycznej? piotr0905 1 5862 08.06.2019 16:50
Ostatni post: wlisik
Ściana Prosta gra w Builder C++ Kiranek1 1 5816 31.05.2019 15:20
Ostatni post: Szachista
  Menu (Nie widoczne długie opisy) wanhelsing 5 7747 28.04.2019 19:31
Ostatni post: koneton
  Skrypt usuwający pliki sylwiaa1 2 3486 28.04.2019 15:20
Ostatni post: sylwiaa1