language: JavaScript (spidermonkey) (spidermonkey-1.7)
date: 281 days 16 hours ago
link:
visibility: private
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Array.prototype.swap=function(a, b)
{
        var tmp=this[a];
        this[a]=this[b];
        this[b]=tmp;
}
  
function partition(array, begin, end, pivot)
{
        var piv=array[pivot];
        array.swap(pivot, end-1);
        var store=begin;
        var ix;
        for(ix=begin; ix<end-1; ++ix) {
                if(array[ix]<=piv) {
                        array.swap(store, ix);
                        ++store;
                }
        }
        array.swap(end-1, store);
 
        return store;
}  
  
function qsort(array, begin, end)
{
        if(end-1>begin) {
                var pivot=begin+Math.floor(Math.random()*(end-begin));
 
                pivot=partition(array, begin, end, pivot);
 
                qsort(array, begin, pivot);
                qsort(array, pivot+1, end);
        }
}
 
function quick_sort(array) {
        qsort(array, 0, array.length);
}
 
function measureSortOrg(array) {
  var start = new Date();
  array.sort();
  var diff = new Date() - start;
  return { res: array, diff: diff };
}
 
function measureSortCustom(array) {
  var start = new Date();
  quick_sort(array);
  var diff = new Date() - start;
  return { res: array, diff: diff };
}
 
  var arrayOrg = [];
  for (var i = 0; i < 5000; i++) {
    arrayOrg.push(Math.random());
  }
  var arrayCustom = arrayOrg.slice(0);
  var arrayOrg = arrayOrg.slice(0);
  var resOrg = measureSortOrg(arrayOrg);  
  var resCustom = measureSortCustom(arrayCustom);
  var equal = true;
  for (var i = 0; i < resOrg.length; i++) {
    if (Math.abs(resOrg[i] - resCustom[i]) > 0.00000001) {
      equal = false;
      break;
    }
  }
  print("lengthOrg: " + resOrg.res.length + ', timeOrg: ' + resOrg.diff + 'ms\n' + "lengthCustom: " + resCustom.res.length + ', timeCustom: ' + resCustom.diff + 'ms\n' + 'equal: ' + equal);