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
       }
   }
}
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 3335 25.03.2017, 16:13
Ostatni post: Szachista
  Zmiana tablic połówkami "C" topornik43 1 2978 09.03.2017, 09:22
Ostatni post: Szachista
  [C++] Zwracanie dwóch wartości z funkcji (szukanie w. maksymalnej - tablica) Chudy2000 3 4826 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
  Program C++ do pola i objętości mistrz18 2 1745 18.10.2017 23:10
Ostatni post: Ajgor
  [C]Część wspólna 2 przedziałów. polak3018 2 1855 13.10.2017 16:43
Ostatni post: ptrick
Question Wyznaczanie maksimum spośród 5 liczb - schemat blokowy mistrz18 5 2180 05.10.2017 19:49
Ostatni post: broda99
  Batch - odczytywanie temperatury karty graficznej i zapisywanie jej do zmiennej Mamalama555 4 2729 03.09.2017 21:41
Ostatni post: Mamalama555
  Kodowanie znaków w .bat kkkkk2105 4 2928 25.08.2017 14:38
Ostatni post: kkkkk2105
  Konwertowanie słów na liczby Java Blendow 5 2801 19.08.2017 21:17
Ostatni post: Szachista
  Kończenie i zamykanie skryptu vbs ottps 1 2464 16.08.2017 23:55
Ostatni post: broda99
  Podwojne menu wyboru w batch files kulis88 3 2912 12.08.2017 23:41
Ostatni post: broda99
  Walidacja tekstu w CSV,XLS w PHP Profedbond 9 3180 11.08.2017 09:10
Ostatni post: insanebear
  [VBS] String TheJohan8 5 3087 08.08.2017 00:11
Ostatni post: Ajgor
  Jaki kod pod buttony i progressbar w visualbasicu2010 Express? aktywny27 2 2739 06.08.2017 14:41
Ostatni post: MrBoombastic
  [VB.Net] webbrowser a kody kreskowe DonCorleone 0 2587 03.08.2017 20:13
Ostatni post: DonCorleone
Ściana batch file ustawianie jednej wartosci zmiennej do kilku plikow kulis88 6 1311 03.08.2017 19:12
Ostatni post: kulis88
  [VBS] loop & if TheJohan8 0 2519 01.08.2017 18:40
Ostatni post: TheJohan8
  Co oznaczają te linijki ? maciex44 2 5602 28.07.2017 21:39
Ostatni post: Ajgor