console
var $ = function(id){
return document.getElementById(id);
},
arr = [],
setArr = function(){
var a = $("arr").value.split(/\D+/);
arr = [];
for(var i=0; i< a.length; i++){
arr.push( a[i] | 0 );
}
},
swap = function(a,b,c){
if(b==c)return;
var t = a[b]; a[b] = a[c]; a[c] = t;
if($("for-log").checked){
println(arr);
}
},
replaceTo = function(a,b,c){
if(b==c)return;
var t = a[c];
a.splice(c,1);
a.splice(b,0,t);
if($("for-log").checked){
println(arr);
}
},
merge = function(a,b){
var ta, tb, tempA=[];
while(a.length&& b.length){
ta = a[0];
tb = b[0];
if(ta>tb){
tempA.push(tb);
b.splice(0,1);
}else{
tempA.push(ta);
a.splice(0,1);
}
}
var t = a.length ? a : b;
for(var i=0; i< t.length; i++){
tempA.push(t[i]);
}
if($("for-log").checked){
println(tempA);
}
return tempA;
},
println = function(str){
$('output').value += $('output').value.split('\n').length + "\t" + str + "\n";
};
var sort = {
'bubble' : function(){
for(var i=0; i<arr.length; i++){
for(var j=0; j<arr.length; j++){
if(arr[j] > arr[j+1])swap(arr,j,j+1);
}
}
},
'selection' : function(){
for(var i=0; i<arr.length; i++){
var flag = i;
for(var j=i+1; j<arr.length; j++){
if(arr[j] < arr[flag])flag = j;
}
swap(arr,i,flag);
}
},
'insertion' : function(){
for(var i = 1; i<arr.length; i++){
var ins = 0,j=0;
while( j<i && arr[i] > arr[j] ){
ins = ++j;
}
replaceTo(arr,ins,i);
}
},
'quick' : function(){
function qk(a,l,r){
var pos = l, t = a[l];
if( l < r ){
for(var i=l+1; i<=r; i++){
if(a[i] < t){ replaceTo(a,l,i); pos++;}
}
qk(a,l,pos-1);
qk(a,pos+1,r);
}
}
qk(arr,0,arr.length-1);
},
'merge' : function(o){
o = o || {};
var pos= 0, arrays = [], temp=[];
for(var i=1; i<arr.length; i++){
if(arr[i] < arr[i-1]){
arrays.push(arr.slice(pos,i));
pos = i;
}
}
arrays.push( arr.slice( pos ) );
temp = arrays[0];
for(var t=1; t<arrays.length; t++){
temp = merge(temp,arrays[t]);
}
arr = temp;
}
};
var exec = function(type,o){
setArr();
var begin = new Date().getTime();
$('output').value = "";
sort[type](o);
println("result:\n\t" + arr + ";\t time:" + (new Date().getTime()-begin) );
};
$('bubble').onclick = function(){
exec('bubble');
};
$('selection').onclick = function(){
exec('selection');
};
$('insertion').onclick = function(){
exec('insertion');
};
$('quick').onclick = function(){
exec('quick');
};
$('merge').onclick = function(){
exec('merge');
};
<textarea name="arr" id="arr" rows="5">56,13,98,78,21,90,17</textarea>
<div class="opt-line">
<input type="checkbox" name="forLog" id="for-log"> <label for="for-log">打印过程</label>
</div>
<div class="btn-line">
<button id="bubble">冒泡排序</button>
<button id="selection">选择排序</button>
<button id="insertion">插入排序</button>
<button id="quick">快速排序</button>
<button id="merge">合并排序</button>
</div>
<textarea name="output" id="output" rows="20" readonly></textarea>
<div id="log"></div>
.btn-line{
width: 900px;
padding: 4px 0;
}
.opt-line{
font-size: 14px;
}
textarea{
width: 900px;
background: #eee;
}