Merge sort i wektory

Odpowiedz Nowy wątek
2015-01-15 00:43
0

Witam. Wiem, że na forum pewno pełno tematów o merge sort, jednak ja mam własny problem. Mamy przygotować program na podstawie algorytmu podane przez naszą wykładowczynię. Z tego, co się zorientowałam, algorytm ten jest "zgodny" z większością programów, które spotkałam w sieci i byłam w stanie go napisać. Pojawił się jednak problem. W algorytmie główny wektor dzielimy na dwa - Lewy i Prawy. Lewy o wielkości n1+1, a Prawy o wielkości n2+1. Jednakże te elementy mają w obu wektorach wartość nieskończoności i nie mam pojęcia, jak mam to ugryźć w programie, więc proszę o pomoc.
Z góry dzięki!

Pozostało 580 znaków

2015-01-15 01:08
0

Nie do końca rozumiem co to znaczy wg ciebie te elementy mają w obu wektorach wartość nieskończoności.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2015-01-15 01:15
0

Chodzi mi o to,że L[n1+1]=nieskończoność i R[n2+1]=nieskończoność.

Pozostało 580 znaków

2015-01-15 01:51
0

Ale po co? Rozumiem ze chodzi o tzw. wartownika który pokazuje gdzie jest "koniec". Ale skoro to są tablice to po co? Zwykle załatwia sie to przez arbitralnie dobraną wartość, która na pewno nie pojawi sie w danych wejściowych. Na przykład jakieś -1 kiedy wartości zawsze są >0


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2015-01-15 01:58
0

Próbowałam przypisać do tych indeksów wartość, która na pewno nie pojawi się w wektorach (w tym przypadku było to 11 - jako, że losowałam z liczb 0-10). A potrzebuję tego, ponieważ późniejsze porównywanie odbywa się właśnie do momentu, w którym ostatni element nie będzie większy od porównywanego.
p to początkowy wyraz, k końcowy, r to rozmiar wektora.

    i=1;
    j=1;

    for(int k=p; k<r; k++)
        {
            if (L[i]<=R[j])
            {
                A[k]=L[i];
                i=i+1;
            }
            else
            {
                A[k]=R[j];
                j=j+1;
            }
        }

Pozostało 580 znaków

2015-01-15 08:16
1
void Join(typ A[],typ L[],typ R[],size_t lfsize,size_t rtsize)
  {
   size_t lf=0,rt=0,i=0;
   while((lf<lfsize)&&(rt<rtsize)) if(L[lf]<=R[rt]) A[i++]=L[lf++]; else A[i++]=R[rt++];
   while(lf<lfsize) A[i++]=L[lf++];
   while(rt<rtsize) A[i++]=R[rt++];
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 0, botów: 1

Robot: CCBot