Wystartowała kolejna edycja Wakacyjnego Konkursu PC Format! Każdy użytkownik ma szanse zdobyć cenne nagrody. Zainteresowanych 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 1904 25.03.2017, 16:13
Ostatni post: Szachista
  Zmiana tablic połówkami "C" topornik43 1 2035 09.03.2017, 09:22
Ostatni post: Szachista
  [C++] Zwracanie dwóch wartości z funkcji (szukanie w. maksymalnej - tablica) Chudy2000 3 4160 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
  C# Android: problem z metodą Context.GetDrawable dorion300 1 4060 11.05.2016 16:27
Ostatni post: dorion300
  [Excel] Dokonanie zbiorowego zestawienia mtz 2 4412 05.05.2016 09:40
Ostatni post: mtz
  Język c, końcówka kodu. PILNE leparkour383 1 4188 04.05.2016 14:08
Ostatni post: Ajgor
  Jaki DBMS dla aplikacji komercyjnej hakus 2 4140 02.05.2016 20:26
Ostatni post: koneton
  Program do stworzenia takiej aplikacji [wydzielone] pepe0619 8 4457 02.05.2016 18:56
Ostatni post: Szachista
  Problem z sortowaniami (bąbelkowe) - Lazarus krychu921 2 4042 02.05.2016 11:13
Ostatni post: krychu921
  [Pascal/Delphi] Sortowanie quicksort oraz scalanie. Chudy2000 3 4403 01.05.2016 22:34
Ostatni post: Szachista
  [C++] Wartość zmiennej zmienia się w destruktorze Halep 2 4214 28.04.2016 20:19
Ostatni post: Halep
[C] Wczytywanie znaku Esc rorschach222 1 4574 14.04.2016 21:45
Ostatni post: kikiw
  Instalacja silnika viaa na wlasnym pc olszak 7 5097 08.04.2016 13:25
Ostatni post: vipdavid
Shy [c++] Odszukanie kilku najmniejszywch wartosci w tablicy wsadx 1 3629 01.04.2016 12:05
Ostatni post: aht
Ściana Wywoływanie funkcji z tabelą jako argumentem jackhalabardnik 2 4876 22.03.2016 21:20
Ostatni post: jackhalabardnik
  Książka do projektowania baz danych Cixi 5 5177 21.03.2016 15:19
Ostatni post: Cixi
  [SQL] Porównywanie String-ów Cixi 1 4496 15.03.2016 11:30
Ostatni post: koneton
  Problem z napisaniem instrukcji C++ matiusz 1 4407 14.03.2016 20:04
Ostatni post: kikiw