排序和搜索算法

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值