Jak "rozsunąć" tablicę jednowymiarową?

0

Witam,

Mam pytanie: próbuję jakoś podejść do sprawy "rozsunięcia" tablicy jednowymiarowej w Javie. Załóżmy, że mam tablicę:

int tab[] = {1,6,9,15,22,37,41,43,50,66,0,0,0,0,0};

Chcę wstawić tam liczbę 35, zachowując porządek, czyli muszę przesunąć elementy od 37 włącznie o jedną pozycję w prawo:

int do_wstawienia = 35;

Wymyśliłem coś takiego, żeby zacząć od końca tej tablicy i po kolei przesuwać wszystkie elementy:

int a;
int dl_tab = tab.length;
        for (a = dl_tab - 1; a >= 0; a--){
            if (tab[a] < do_wstawienia && tab[a] != 0){
               tab[a] = tab[a+1];
            }
		else tab[a] = do_wstawienia;
            System.out.print(" " + tab[a]);
        }
    }
}

Niestety, nie działa to dobrze...dostaję tablicę z samymi liczbami 35. Gdzie robię błąd?

0

Możesz to zrobić tak że masz tablicę z n elementami i chcesz wstawić element na i-tej pozycji. Wtedy tworzysz tablicę n+1 elementowa i przepisujesz elementy o indeksach mniejszych od i do nowej tablicy, tablicę o indeksie i uzupelniasz nowym elementem, a resztę przepisujesz przy czym tablica[j]=tablicaWejsciowa[j+1].
Albo możesz najpierw zmienić tablicę na listę, dodać element (add(element,indeks)) i zmienić ją na tablicę.
Przynajmniej ja bym tak to zrobił, ale ja bym poczekal aż ktoś inny odpisze bo pewnie da się to lepiej zrobić.

0

z tego co widzę to idziesz po tablicy od końca, więc zastanów się czy ten fragment ma sens:

 tab[a] = tab[a+1]

powinno być tak że jeżeli przesuwasz w prawo (bo po to są chyba te zera) to dopóki nie dojdziesz do właściwego elementu, każdemu elementowi nadajesz wartość jaką miał poprzedni

Może nie powinienem tak od razu ale zobacz sobie jak ja bym to zrobił:

 int tab[] = {1,6,9,15,22,37,41,43,50,66,0,0,0,0,0};
		int do_wstawienia = 35;
		int dl_tab = tab.length;
		for (int a = dl_tab - 1; a >= 0; a--) {
		    if (tab[a]==0 || tab[a]>do_wstawienia) tab[a]=tab[a-1];
		    else {
		    	tab[a+1]=do_wstawienia;
		    	break;
		    }
		}
		
		for(int i=0; i < dl_tab; i++) System.out.print(tab[i] + ",");
0

A nie lepiej uzyc ktorejs listy? (LinkedList)

0

Tak, na pewno da się to zrobić prościej, ale tutaj chodzi o to, aby pokazać tak jakby sam algorytm działania takiego założenia, dlatego operuję na samej esencji, a nie na gotowych funkcjach.

wazxse5, dzięki za wskazówki, moja idea jest dokładnie taka, jak to opisałeś słownie. Widzę, że mój tok rozumowania był słuszny, zabrakło tylko (a może i aż) odrobiny logiki...muszę to prześledzić na spokojnie i pewnie zadam sobie pytanie: dlaczego od początku bym tak nie zrobił :)

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