Sortowanie tablicy bąbelkowo w której pierwszym elementem tablicy jest string, a drugim liczba

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
tomi0001
Sędziwy Jeż
Sędziwy Jeż
Posty: 82
Rejestracja: 07 lis 2012, 13:03
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma
Architektura: x86_64
Kontakt:

Sortowanie tablicy bąbelkowo w której pierwszym elementem tablicy jest string, a drugim liczba

Post autor: tomi0001 »

Mam taki problem chcę posortować tablicę algorytmem sortowanie bąbelkowego jak to zrobić po jak próbowałem zrobić w taki sposób

Kod: Zaznacz cały

 $n = count($szukaj2);
      for($j= 0;$j < $n;$j++) {
        for ($x = $j - 1;$x >=$j;$x--) {
          if ($szukaj2[$x-1] < $szukaj2[$x]) {
        list($szukaj2[$x-1],$szukaj2[$x]) = array($szukaj2[$x],$szukaj2[$x-1]);
          }
        }
 
      }
Przy czym $szukaj2 jest tablicą dwuwymiarową pierwszy element tablicy jest liczba zmiennoprzecinkowa, a drugi to string, moje pytanie jest takie gdzie tu błąd.
kobylecki
Piegowaty Guziec
Piegowaty Guziec
Posty: 19
Rejestracja: 05 gru 2005, 18:11
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: Unity
Architektura: x86

Re: Sortowanie tablicy bąbelkowo w której pierwszym elementem tablicy jest string, a drugim liczba

Post autor: kobylecki »

A trzecim elementem co jest?

Trochę nie napisałeś o co ci chodzi. Algorytm sortowania, w tym wypadku bąbelkowy, powinien sortować tablicę elementów jakiegoś jednego konkretnego typu. Na przykład tablicę liczb, tablicę stringów, itd. Gdyby tak nie było trudno by było powiedzieć co to znaczy, że jakiś string jest mniejszy czy większy od liczby.

Same indeksy j i x też masz źle ustawiane. Np. w pierwszej iteracji j = 0 i x = -1 i chcesz się odwołać do elementów -1 i -2.
Napisz o co tak naprawdę chodzi, może elementy w tablicy to pary string i liczba? (np. zawarte w tablicy)

-- 03 lip 2014 19:24 --

Idąc dalej, przyjmę, że elementem twojej tablicy jest tablica z dwoma elementami (pierwszy string, a drugi liczba).
W takim wypadku

Kod: Zaznacz cały

if ($szukaj2[$x-1] < $szukaj2[$x])
nie może się poprawnie wykonać, bo nie wiadomo co to znaczy tablica < tablica.
Moja propozycja jest taka, żebyś w tym warunku sprawdził, czy elementy nie są w tej relacji (mniejszości), ale w odrębnej funkcji.

Kod: Zaznacz cały

if (compare($szukaj2[$x-1], $szukaj2[$x]) < 0)
, a wcześniej zdefiniuj funkcję compare, do której przekazujesz dwa elementy, które są dwuelementowymi tablicami string, liczba. Zazwyczaj taka funkcja powinna zwracać 0 kiedy elementy są równe, ujemną wartość jeżeli pierwsza jest mniejsza, dodatnią - jeżeli jest większa. I tak to zrób.

Na koniec przejrzyj indeksy, czy rzeczywiście są dobrze ustawiane w pętlach for.

tutaj przykładowa implementacja takiej funkcji:

Kod: Zaznacz cały

function compare($elem1, $elem2)
{
    // porównujemy stringi i jeżeli były różne to znamy wynik
    $string_comparison = strcmp($elem1[0], $elem2[0]);
    if ($string_comparison != 0) return $string_comparison;
    
    // jeżeli były równe to musimy porównać liczby
    return $elem2[1] - $elem1[1];
}
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 8 gości