sorting - Radix sort in java help -
hi need improve code. trying use radixsort sort array of 10 numbers (for example) in increasing order.
when run program array of size 10 , put 10 random int numbers in 70 309 450 279 799 192 586 609 54 657
i out:
450 309 192 279 54 192 586 657 54 609
don´t see error in code.
class intqueue { static class hlekkur { int tala; hlekkur naest; } hlekkur fyrsti; hlekkur sidasti; int n; public intqueue() { fyrsti = sidasti = null; } // first number in queue. public int first() { return fyrsti.tala; } public int get() { int res = fyrsti.tala; n--; if( fyrsti == sidasti ) fyrsti = sidasti = null; else fyrsti = fyrsti.naest; return res; } public void put( int ) { hlekkur nyr = new hlekkur(); n++; nyr.tala = i; if( sidasti==null ) f yrsti = sidasti = nyr; else { sidasti.naest = nyr; sidasti = nyr; } } public int count() { return n; } public static void radixsort(int [] q, int n, int d){ intqueue [] queue = new intqueue[n]; (int k = 0; k < n; k++){ queue[k] = new intqueue(); } (int = d-1; >=0; i--){ (int j = 0; j < n; j++){ while(queue[j].count() != 0) { queue[j].get(); } } (int index = 0; index < n; index++){ // trying @ 1 of 3 digit sort after. int v=1; int digit = (q[index]/v)%10; v*=10; queue[digit].put(q[index]); } (int p = 0; p < n; p++){ while(queue[p].count() != 0) { q[p] = (queue[p].get()); } } } } }
i thinking can let function take 1 queue argument , on return queue in increasing order? if how?
please help. sorry if english bad not in it.
please let know if need more details.
import java.util.random; public class radtest extends intqueue { public static void main(string[] args) { int [] q = new int[10]; random r = new random(); int t = 0; int size = 10; while(t != size) { q[t] = (r.nextint(1000)); t++; } for(int = 0; i!= size; i++) { system.out.println(q[i]); } system.out.println("radad: \n"); radixsort(q,size,3); for(int = 0; i!= size; i++) { system.out.println(q[i]); } } }
hope talking about...
thank answer, it. not looking solve problem me. looking , ideas how can solve it.
in task says:
implement radix sort function integers sorts queues. function should take 1 queue argument , on return queue should contain same values in ascending order may assume values between 0 , 999.
can put 100 int numbers on queue , use radixsort function sort or need put numbers in array , array in radixsort function use queues?
i understand needed put numbers in int queue , put queue function has not worked.
but thank answers @ them , try solve problem. if think can please leave comment.
this works test cases tried. it's not entirely documented, think that's okay. i'll leave read it, compare you're doing, , find out why have might different mine in philosophy. there's other things marked did them "lazy" way, , should them better way.
import java.util.*; class radix { static int[] radixsort(int[] arr) { // bucket used in method, declare here // i'm not 100% sure recommend doing in production code // turns out, it's legal do! class bucket { private list<integer> list = new linkedlist<integer>(); int[] sorted; public void add(int i) { list.add(i); sorted = null;} public int[] getsortedarray() { if(sorted == null) { sorted = new int[list.size()]; int = 0; for(integer val : list) { sorted[i++] = val.intvalue(); // autobox, oh } arrays.sort(sorted); // use whatever method want sort here... // arrays.sort isn't allowed } return sorted; } } int maxlen = 0; for(int : arr) { if(i < 0) throw new illegalargumentexception("i don't deal negative numbers"); int len = numkeys(i); if(len > maxlen) maxlen = len; } bucket[] buckets = new bucket[maxlen]; for(int = 0; < buckets.length; i++) buckets[i] = new bucket(); for(int : arr) buckets[numkeys(i)-1].add(i); int[] result = new int[arr.length]; int[] posarr = new int[buckets.length]; // int 0 for(int = 0; < result.length; i++) { // 'best' element, appropriate // set of earliest unused elements each bucket int best = -1; int bestpos = -1; for(int p = 0; p < posarr.length; p++) { if(posarr[p] == buckets[p].getsortedarray().length) continue; int oldbest = best; best = bestof(best, buckets[p].getsortedarray()[posarr[p]]); if(best != oldbest) { bestpos = p; } } posarr[bestpos]++; result[i] = best; } return result; } static int bestof(int a, int b) { if(a == -1) return b; // you'll have write :) string = a+""; string bs = b+""; if(as.compareto(bs) < 0) return a; return b; } static int numkeys(int i) { if(i < 0) throw new illegalargumentexception("i don't deal negative numbers"); if(i == 0) return 1; //return (i+"").length(); // lame method :} int len = 0; while(i > 0) { len++; /= 10; } return len; } public static void main(string[] args) { int[] test = {1, 6, 31, 65, 143, 316, 93, 736}; int[] res = radixsort(test); for(int : res) system.out.println(i); } }
Comments
Post a Comment