Merge sort i wektory

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!

0

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

0

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

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

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;
			}
		}
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++];
  }

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