21. juli 2003 - 10:45Der er
10 kommentarer og 2 løsninger
Sortering af int array
Hej!
Jeg havde for et stykke tid siden brug for en metode, der kunne sortere en række ints i et array efter størrelse, og da jeg havde lidt travlt, blev det ikke så kønt :) Er der nogen, der har noget liggende, der er lidt kønnere?
public static int[] sort(int[] a){ Vector v = new Vector();
for (int i=0; i<a.length; i++){ int n = a[i]; if (v.size() != 0){ boolean placed = false; int x=0; while (x<v.size() && !placed){ int n2 = ((Integer)v.elementAt(x)).intValue(); if (n < n2){ v.insertElementAt(new Integer(n), x); placed = true; } x++; } if (!placed) v.insertElementAt(new Integer(n), x); } else v.addElement(new Integer(n)); }
int[] a2 = new int[v.size()]; for (int i=0; i<v.size(); i++){ a2[i] = ((Integer)v.elementAt(i)).intValue(); } return a2; }
det får du ikke her. det er blot dit array der er sorteret bagefter:
public static sort(int[] a){ int i, j, max, temp; for ( j=a.length-1; j>0; j-- ) { max = 0; for ( i=1; i<=j; i++ ) { if ( a[i] >= a[max] ) max = i; // find index på største tal } if ( max != j ) { // flyt største tal hen forenden temp = a[j]; a[j] = a[max]; a[max] = temp; } } } //endfunction sort
jakoba: Ja, jeg vil gerne ha' et nyt array... arne_v: jeg kan desværre ikke bruge koden direkte, men hvis jeg får tid, vil jeg da prøve at kigge på det
public static sort(int[] a){ int[] res = new int[ a.length ] int i, j, max, temp; for ( j=a.length-1; j>0; j-- ) { max = 0; for ( i=0; i<=j; i++ ) { if ( a[i] >= a[max] ) max = i; // find index på største tal } // flyt største tal op forenden res[j] = a[max]; if ( max != j ) a[max] = a[j]; } return res; } //endfunction sort
Ups. jeg glemte at give funktionen en type (og forresten ødelægger jeg det oprindelige array)
public static int[] sort(int[] a){ int i, j, max, temp; int[] res = new int[ a.length ] for ( i=0; i<a.length; i++ ) res[i] = a[i]; // kopier fra gammelt array for ( j=a.length-1; j>0; j-- ) { max = 0; for ( i=0; i<=j; i++ ) { if ( res[i] >= res[max] ) max = i; // find index på største tal } if ( max != j ) { // flyt største tal hen forenden temp = res[j]; res[j] = res[max]; res[max] = temp; } } return res; } //endfunction sort
Quick sort er hurtigere hvis der skal sorteres rigtigt mange tal.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.