Advertisement
rg443

MSB radix sort

Jan 30th, 2013
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // MSB radix sort
  2. //arguments to sort an array:
  3. //arr: array to be sorted
  4. //begin: 0
  5. //end: length of array
  6. //bit: maximum number of bits required to represent numbers in arr
  7. function sort(arr, begin, end, bit)
  8. {
  9.   var i, j, mask;
  10.   i = begin;
  11.   j = end;
  12.   mask = 1 << bit;
  13.   while(i < j)
  14.   {
  15.     while(i < j && !(arr[i] & mask))
  16.     {
  17.       ++i;
  18.     }
  19.     while(i < j && (arr[j - 1] & mask))
  20.     {
  21.       --j;
  22.     }
  23.     if(i < j)
  24.     {
  25.       j--;
  26.       var tmp = arr[i];
  27.       arr[i] = arr[j];
  28.       arr[j] = tmp;
  29.       i++;
  30.     }
  31.   }
  32.   if(bit && i > begin)
  33.   {
  34.     sort(arr, begin, i, bit - 1);
  35.   }
  36.   if(bit && i < end)
  37.   {
  38.     sort(arr, i, end, bit - 1);
  39.   }
  40. }
  41.  
  42. // test case
  43. for (var arr=[],i=0;i<1000000;i++) arr.push(~~(Math.random()*4294967296)); // 1 million random numbers
  44. console.time("radix");
  45. sort(arr, 0, arr.length, 32);  //Here I've assumed that the values in arr are integers that fit in 32 bits
  46. console.timeEnd("radix");
  47. // radix: 780.000ms
  48. /*
  49. radix: 1ms    #      1.000
  50. radix: 8ms    #     10.000
  51. radix: 77ms   #    100.000
  52. radix: 745ms  #  1.000.000
  53. radix: 7168ms # 10.000.000
  54. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement