←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Sortowanie tablicy

  • +
  • -
A może sma? - zdjęcie A może sma? 29.04.2012

Siemanko.
Mam tablice z liczbami naturalnymi. Chce ją posortować malejąco (tzn. indeks 0 zawiera największy element);
To co? SortCustom1D i jedziemy? No nie do końca...
Oprócz tej tablicy podczas sortowania, dwie inne (string i integer) muszą "podążać" za pierwszą.
Mógłby mi ktoś podrzucić pomysł jak to zrobić...? Próbowałem sortowania bąbelkowego (może jakieś inne użyć?) w taki sposób:

new i = MAX_TOP;
while(i > 0)
{
for(new j = 0; j < MAX_TOP - 2; j++)
{
if(jumps_top[j] < jumps_top[j+1])
{
new temp_name_top[31], temp_jumps_top, temp_level_top;

copy(temp_name_top, 31, name_top[j]);
temp_jumps_top = jumps_top[j];
temp_level_top = level_top[j];

copy(name_top[j], 31, name_top[j+1]);
jumps_top[j] = jumps_top[j+1];
level_top[j] = level_top[j+1];

copy(name_top[j+1], 31, temp_name_top);
jumps_top[j+1] = temp_jumps_top;
level_top[j+1] = temp_level_top;
}
}
i -= 1;
}


Co robię źle? ;F
Generalnie to tablica jest małych rozmiarów (mniejsza niż 15 elementów)
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 29.04.2012

wiem ze to wymaga dosc dlugiego i intensywnego myslenia ale oto jestem i ci pomoge

http://amxx.pl/dokum...31/sortcustom1d

masz calbacka to przy zwracaniu wartosci przy okazji sobie zamien wartosci z innych tablic

ewentualnie piszesz wlasną interpretacje jednego z algorytmów sortujących najlatwiej zrobic bombelkowe :D
Odpowiedz

  • +
  • -
A może sma? - zdjęcie A może sma? 29.04.2012

Edit2: Bo jednak tego... Skąd mam wziąć indeks porównywanych elementów tablicy...?
Odpowiedz

  • +
  • -
A może sma? - zdjęcie A może sma? 01.05.2012

To co z tymi indeksami? :F
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 01.05.2012

SortCustom2D?
Ogólnie nie bardzo rozumiem co chcesz dokładnie osiągnąć, ale może ten kod trochę Ci ułatwi przyswojenie takiego sortowania.
public Fragi() {
new sort[33][2];
new count, i;

for(i=1; i<=32; ++i) {
if(is_user_connected(i)) {
sort[count][0] = get_user_frags(i);
sort[count++][1] = i;
}
}
SortCustom2D(sort, count, "sortuj");

for(i=0; i<count; ++i)
client_print(0, print_chat, "Fragi: %i | ID: %i", sort[i][0], sort[i][1]);
}

public sortuj(elem1[], elem2[]) {
if(elem1[0] > elem2[0])
return -1;
else if(elem1[0] < elem2[0])
return 1;

return 0;
}
Odpowiedz

  • +
  • -
A może sma? - zdjęcie A może sma? 01.05.2012

Co chcę osiągnąć? Krótko mówiąc - chcę zrobić statystyki powiedzmy 15 najlepszych graczy, które są wczytywane z pliku.
Chcę wczytać z pliku *.ini informacje do dwóch tablic - jedna zawiera liczby, druga nick gracza.
Myślałem by zrobić to w ten sposób:
- wczytać informacje do dwóch tablic (pierwsza zawiera liczby, według których chciałem sortować tą tablice, druga zawiera nicki graczy)
- sprawdzać podczas gry czy ktoś jest lepszy od ostatniego gracza z pliku
- jeżeli tak, to wrzucić go jako ostatni element tablicy i ją posortować, bo będąc lepszym od ostatniego, mógł być jednocześnie lepszy od przedostatniego itd.
I mój problem sporowadza się do samego sortowania - nie wiem jak zrobić, by druga tablica (zawierająca nicki), była "sortowana" wraz z pierwszą - tzn. jeżeli np. ostatni element tablicy pierwszej szedł na jej początek, to żeby to samo działo się z drugą tablicą...
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 01.05.2012

Można chyba się obejść bez sortowania drugiej tablicy. Zapisz nicki gracza w drugiej tablicy w kolejności id graczy, potem posortuj pierwszą tablicę tym sposobem, który podałem, a na sam koniec w pętli nicki możesz wyciągać przez id gracza z drugiej tablicy, czyli np.
nicki_graczy[sort[i][1]];

Ogólnie jeśli to mają być nicki, to czy jest sens robienia tego za pomocą tablicy? Przecież nick można pobrać później, po posortowaniu pierwszej tablicy.
Odpowiedz