#1 31.05.07 00:52
[Java] проблема с сортировкой
есть класс list.то есть односвязынй список.
есть класс elem в классе list.то есть элемент списка.
Код: Java:
class elem { Comparable val; elem next; }
а есть сортировка:
Код: Java:
void sort() { elem q, out, p , pr; out = null; while (hd !=null) //hd - заголовок списка { q = hd; hd = hd.next; for( p=out,pr=null; p!=null && q.val.compareTo(p.val)>0;pr=p,p=p.next); if (pr==null) { q.next=out; out=q; } else { q.next=p; pr.next=q; } } hd=out; }
метод compareTo переопределён след. образом в классе nexx:
а теперь,уважаемые знатоки,вопрос:
почему сортировка работает нормально только с цифрами (0-9) или же только с дву(трёх,четырёх...n)значными числами.если же попробовать отсортировать 3,4 и 30,то получается фигня какая-то.
на Си сортировка работает без проблем.
Исправлено chezzz (31.05.07 00:56)
Offline
#3 31.05.07 01:28
Re: [Java] проблема с сортировкой
Код: java:
List<String> list = new ArrayList<String>(); list.add("30"); list.add("4"); list.add("3"); Iterator<String> it = list.iterator(); while(it.hasNext()) { System.out.println(it.next()); } java.util.Collections.sort(list); it = list.iterator(); while(it.hasNext()) { System.out.println(it.next()); }
Offline
#6 31.05.07 21:35
Re: [Java] проблема с сортировкой
chezzz, класс nexx - класс целых чисел во внешней форме представления?
Исправлено kvazimodo (31.05.07 21:46)
Offline
#8 01.06.07 20:11
Re: [Java] проблема с сортировкой
просто задание знакомо ;)
я делал так:
Код: Java:
public class integer implements Comparable{ char[] c; short sign; int sz; . . . public int compareTo(Object s) // сравнение объектов { if(!(s instanceof integer)) return 0; integer snd=(integer) s; if(sign==snd.sign)// сначала знаки { if(sz<snd.sz) return sign==1 ? -1 : 1; // потом размерности else if(sz>snd.sz) return sign==1 ? 1 : -1; else { for(int i=0; i<sz;i++)//затем по старшей цифре { if(c[i]>snd.c[i]) return sign==1 ? 1 : -1; else if(c[i]<snd.c[i]) return sign==1 ? -1 : 1; } return 0; } }//0-равны, 1-первый больше, -1-первый меньше else return sign>snd.sign ? 1 : -1; } }
Offline

