javascript排序算法

这个。。。搞了好几天。唉,没学过数据结构的人飘过。写了几个算法,等有时间,把那书好好看了,写个完整点的

View Code
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>

<script type="text/javascript">

var sort = function(arr){
this.arr = arr
}
sort.prototype
= {
constructor: sort,

swap:
function(r1, r2, arr){
var arr=arr||this.arr,temp=arr[r1];
arr[r1]
=arr[r2];
arr[r2]
=temp;
},

systemSort:
function(arr){
var arr=arr||this.arr;
return arr.sort(function(a,b){return a-b;});
},

bubbleSort:
function(r1, r2, arr){
var arr = arr || this.arr;
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length - i - 1; j++) {
arr[j]
> arr[j + 1] ? (j, j + 1) : void (0);//小的放上面,
}
}
return arr;
},

quickSort:
function(o){
var o = o ||{};
var arr = o.arr || this.arr, swap = this.swap;
var qs1 = function(arr){
if (arr.length > 1) {
var key = arr[0], arr1 = [], arr2 = [];
for (var i = 1; i < arr.length; i++)
arr[i]
<= key ? arr1.push(arr[i]) : arr2.push(arr[i])
arr1
= qs1(arr1);
arr2
= qs1(arr2);
return arr1.concat(key, arr2)
}
else {
return arr;
}
}
return qs1(arr)
},

selectionSort:
function(arr){
var arr = arr || this.arr, temp, min;
for (var i = 0; i < arr.length - 1; i++) {
for (var min = i, j = i + 1; j < arr.length; j++)
min
= arr[min] > arr[j] ? j : min
if (i != min)
this.swap(i, min)
}
return arr;
},

//插入排序
insertionSort: function(arr){
var arr=arr||this.arr,arr2=[],swap=this.swap;
//直接插入排序,教科书方式
var straight2=function(){
for(var i=1;i<arr.length;i++){
var temp=arr[i]
for (var j =i-1;j>=0;j--) {
if(temp<arr[j]) {
arr[j
+1]=arr[j];
console.info(
"if--------",i,j,arr)
}
else break;
}
arr[j
+1]=temp;
}
return arr;
}
return straight2()
}

}


var a=[];
for(var num=0;num<20;num++)
a[num]
=parseInt(Math.random()*100)

var b = new sort(a);
for(var i in b){
if(i!="arr"&&i!="constructor"&&i!="swap"){
var c = new sort(a);
document.write(i
+"---"+c[i]()+"<br/>")
}

}



</script>

</body>
</html>
原文地址:https://www.cnblogs.com/lunalord/p/1970108.html