排序和搜索算法

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;

}

猜你喜欢

转载自blog.csdn.net/kalinux/article/details/82226899
今日推荐