Wpis z mikrobloga

Witam wszystkich z #programowanie a w szczegolnosci z #java. Mam takie pytanie. Jak najoptymalniej wykonac następujące zadanie. Mam podane wczesniej 4 liczby 123,94,6,323 i musze je posortowac po ilosci cyfr czyli ma sie wyświetlac 123,323,94,6 lub 323,123,94,6. Jak byscie to wykonali? Dzieląc kazdą z tych liczb przez 10 do momentu az jest ona większa bądz równa 0? Czy moze konwersja int to string a pozniej i porównac długosc? Czy moze macie jakies inne propozycje?
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@pioterhiszpann: Widziałem dawno temu podobne pytanie i wyszło na to że optymalnie wypadło to z if-ami...
Ale z własnej wiedzy, polecam zrobić dokładnie to samo co robi Java.

final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,
99999999, 999999999, Integer.MAX_VALUE
  • Odpowiedz
@lavsprat: nie wiem czy to ma sens, raczej wygodniej już sobie zrobić dla każdego typu którego używasz, w końcu to tylko byte/short/int/long.
@pioterhiszpann
Dodatkowo pisałem o wersji z ifami, ale w końcu się nie rozpisałem... wygląda to np tak: http://pastebin.com/r3yhSpXr
Wygląda okropnie, ale działa szybciej niż wersja z tablicą (w zależności od liczb, od 2x do jakiś 10%), o ile potrzebujesz aż tak dobrych wyników. (to jednak już tylko różnice w ns, a więc jak nie wykonujesz tego po kilka milionów razy na sekundę to nie masz się czym przejmować.)

Dodatkowo możesz sobie obie te metody zoptymalizować do spodziewanych wyników, jak spodziewasz się samych dużych liczb, możesz sprawdzać w odwrotnej kolejności. Ale to znowu tylko
  • Odpowiedz
@pioterhiszpann: No to jak 4 cyfry i liczby dodatnie to tym bardziej opcja z ifami/tablicą będzie szybka i idealna.

A TreeMap... ponad 28 bajtów na liczbę na x64, Czyli ponad 7x więcej.
Jedynym plusem może być sortowanie "na bieżąco" ale to też można załatwić innymi metodami. (no i nie napisałeś czy jest potrzebne, wynika raczej że chcesz to posortować tylko raz)
  • Odpowiedz