<HTML>
<HEAD><TITLE>SORT</TITLE></HEAD>
<BODY>
<TABLE BGCOLOR="WHITE" BORDER=1><TH>GENERATE RANDOM NUMBERS</TH> <TR><TD>
<FORM NAME=random onSubmit="newrandom(); return false;">
Smallest number <input type="text" name="startrange" value="0"><br>
Biggest number <input type="text" name="endrange" value="99000"><br>
Values to generate <input type="text" name="xvalues" value="99000"><P>
<input type="submit" value="GENERATE"><P>
VALUES TO SORT "PRINTOUT ONLY FOR ARRAY WITH LESS THEN 100000 ELEMENTS"<BR>
<TEXTAREA NAME=sort COLS=120 ROWS=8>
</TEXTAREA><BR>
</FORM>
</TD></TR></TABLE>
<TABLE BGCOLOR="WHITE" BORDER=!>
<TH>COMPARE SORT TIMINGS</TH>
<TR><TD>CHOOSE SORT ALGORITHM
<select id="mySelect" onchange="chosesort();">
<option value="index">JT_INDEXSORT</option>
<option value="javascript">javascript_sort</option>
<option value="quick">QUICKSORT</option>
</select>
<FORM NAME=sort onSubmit="chosesort(); return false;">
<input type=submit value="SORT"> TIME MS <input type="text" name="functime" value=""><br>
SORTED VALUES PRINTOUT "ONLY IF ARRAY HAS LESS THEN 100000 ELEMENTS":<BR>
<TEXTAREA TYPE=TEXT NAME=distrib COLS=120 ROWS=23>
</TEXTAREA><BR>
</FORM>
</TD></TR></TABLE>
</BODY>
<SCRIPT LANGUAGE="Javascript">
newrandom();
chosesort();
function newrandom(){
dval=new Array();
start=document.random.startrange.value;
end=document.random.endrange.value;
start=Number(start);
end=Number(end);
numberofvalues=document.random.xvalues.value;
//Generate random values
for (var i=0;i<numberofvalues;i++){
number=Math.floor(Math.random() * end) + start;
dval[i]=number;
}
if (dval.length<100000) {document.random.sort.value=dval;} else {document.random.sort.value=dval.length+" elements in array"};
}
function chosesort(){
selectedsort = document.getElementById("mySelect").value;
if (selectedsort=="index"){jtindexsort();}
else if (selectedsort=="javascript"){javascriptNativesort();}
else if (selectedsort=="bubble"){bubbleSort();}
else if (selectedsort=="quick"){ quickSort(dval,0,numberofvalues);}
if (dval.length<100000) {printout();} else {document.sort.distrib.value=dval.length+" sorted in array"};
}
function quickSort(arr, left, right)
{
var starttime = new Date().getTime();
var i = left;
var j = right;
var tmp;
pivotidx = (left + right) / 2;
var pivot = parseInt(arr[pivotidx.toFixed()]);
/* partition */
while (i <= j)
{
while (parseInt(arr[i]) < pivot)
i++;
while (parseInt(arr[j]) > pivot)
j--;
if (i <= j)
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
}
/* recursion */
if (left < j)
quickSort(arr, left, j);
if (i < right)
quickSort(arr, i, right);
var endtime = new Date().getTime();
var timed = endtime - starttime;
document.sort.functime.value=timed;
return arr;
}
function javascriptNativesort(){
var starttime = new Date().getTime();
dval = dval.sort(sortNumber);
var endtime = new Date().getTime();
var timed = endtime - starttime;
document.sort.functime.value=timed;
}
function sortNumber(a, b)
{
return a - b;
}
function jtindexsort(){
var starttime = new Date().getTime();
countval= new Array();
//Initiate array range
for (j=start;j<end;j++){
countval[j]=0;
}
var temp;
//Put them on correct index
for (var i=0;i<numberofvalues;i++){
temp=dval[i];
countval[temp]=countval[temp]+1;
}
p=0;
dval = [];
for (var j=start;j<end;j++){
temp=countval[j]
for (var k=0;k<temp;k++){
dval[p]=j;
p++;
}
}
var endtime = new Date().getTime();
var timed = endtime - starttime;
document.sort.functime.value=timed;
}
function printout(){
valdist="";
for (var j=0;j<numberofvalues;j++){
valdist+=dval[j]+",";
}
document.sort.distrib.value=valdist;
}
</SCRIPT>
</HTML>