import java.util.*; /*********************************************************** * Oblig 3 - sekvensiell kode, INF2440 v2017. * Ifi, Uio, Arne Maus * for store verdier av n > 100 m, kjør (f.eks): * >java -Xmx16000m MultiRadix 1000000000 ************************************************************/ class MultiRadix{ int n; int [] a; final static int NUM_BIT = 7; // alle tall 6-11 .. finn ut hvilken verdi som er best int [] radixMulti(int [] a) { long tt = System.nanoTime(); // 1-5 digit radixSort of : a[] int max = a[0], numBit = 2, numDigits, n =a.length; int [] bit ; // a) finn max verdi i a[] //Timer ta = new Timer().start(); for (int i = 1 ; i < n ; i++) if (a[i] > max) max = a[i]; while (max >= (1L< 0) bit[i]++; } int[] t=a, b = new int [n]; for (int i =0; i < bit.length; i++) { radixSort( a,b,bit[i],sum ); // i-te siffer fra a[] til b[] sum += bit[i]; // swap arrays (pointers only) t = a; a = b; b = t; } if (bit.length%2 != 0 ) { // et odde antall sifre, kopier innhold tilbake til original a[] (nå b) System.arraycopy (a,0,b,0,a.length); } return a; } // end radixMulti /** Sort a[] on one digit ; number of bits = maskLen, shiftet up 'shift' bits */ void radixSort ( int [] a, int [] b, int maskLen, int shift){ int acumVal = 0, j, n = a.length; int mask = (1<>> shift) & mask]++; } //System.out.println("B: "+tb.end().prettyTime()); // c) Add up in 'count' - accumulated values //Timer tc = new Timer().start(); for (int i = 0; i <= mask; i++) { j = count[i]; count[i] = acumVal; acumVal += j; } //System.out.println("C: "+tc.end().prettyTime()); // d) move numbers in sorted order a to b //Timer t = new Timer().start(); for (int i = 0; i < n; i++) { b[count[(a[i]>>>shift) & mask]++] = a[i]; } //t.end(); //System.out.println("seq D: "+t.prettyTime()); }// end radixSort void testSort(int [] a){ for (int i = 0; i< a.length-1;i++) { if (a[i] > a[i+1]){ System.out.println("SorteringsFEIL på plass: "+i +" a["+i+"]:"+a[i]+" > a["+(i+1)+"]:"+a[i+1]); return; } } }// end simple sorteingstest }// end SekvensiellRadix