1,创建一个排序算法类:
function ArrayList(){
var array=[ ];
this.insert=function(value){
array.push(value);
}
this.toString=function(){
return array.join();
}};
---------------------------------------------
1,冒泡排序:值按从小到大排列。
this.bubblesort=function(){
var length=Array.length;
for(var i=0;i<length;i++){ //行1
for( var j=0;j<length-1;j++){ //行2
if(array[j]<array[j-1]){
var arr=array[j];
array[j]=array[j-1];
array[j-1]=arr;
}}};
这种方法的弊端:比如原来54321,已经排成了32145,那么后面两位就不需要再排序了,所以代码部分可以优化为:
行2:for(var j=0;j<length-1-i ; j++)
---------------------------------------------------
2,选择排序:
选择数据中最小的值将其放置在第一位,选择数据中的第二大值放在第二位;
this.selectionsort=function(){
var length=array.length;
fpr(var i=0;i<lengrth;i++){
indexmin=i;
for(var j=i;j<length-i;j++){
if(array[indexmin]>array[j]){
indexmin=j;
}};
swap(i, indexmin);
}}
function swap(x,y){
m=array[x];
array[x]=array[y];
array[y]=m;
}
------------------------------------------------------------------------------
3,插入排序:利用一个指针遍历数据,依次让它和它之前的数据进行比较,若它更小就将和它比较的数赋给它,直到遇到比它小的数据,结束比较,将比它小的数据的后一个数据改成指针预先保存的值;
this.selectionsort=function(){
var length=array.length;
for (var i=0;i<length;i++){
var temp=array[i];
while(j>0&&array[j-1]>array[j]){
array[j]=array[j-1];
j--; }
array[j ]=temp;
} };
-----------------------------------------------------------------------------
4,归并排序:利用二分法,将数据分成一半一半的,分别比较左右数值的大小,最后合并。
this.mergesort=function(array){
array=mergesortRect(array);
}
var mergesortRect=function(array){
var length=array.length;
if(length==1){
return array;
}
var mid=Math.floor(length/2);
left=array.slice(0, mid);
right=array.slice(mid, length);
return merge(mergesortRect(left), mergesortRect(right));
}
var merge=function(left, right){
var result=[ ],,
il=0,
ir=0;
while(il<left.length&&ir<right.lenth){
if(left[il]<right[ir]){
result.push(left[il++]);
}else{
result.push(right[ir++]);
}
}
while(il<left.length){
result.push(left[il++]);
}
while(ir<right.length){
result.push(right[ir++]);
}
return result;
}