码迷,mamicode.com
首页 > 编程语言 > 详细

一些常见算法的JavaScript实现

时间:2014-11-19 22:05:11      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:http   io   ar   color   使用   java   for   on   art   

在Web开发中,JavaScript很重要,算法也很重要。下面整理了一下一些常见的算法在JavaScript下的实现,包括二分法、求字符串长度、数组去重、插入排序、选择排序、希尔排序、快速排序、冒泡法等等。仅仅是为了练手,不保证高效与美观,或许还有Bug,有时间再完善吧。汝阳县第一中学

二分法:

function binary(items,value){
 var startIndex=0,
     stopIndex=items.length-1,
     midlleIndex=(startIndex+stopIndex)>>>1;
     while(items[middleIndex]!=value && startIndex<stopIndex){
       if(items[middleIndex]>value){
          stopIndex=middleIndex-1;
       }else{
          startIndex=middleIndex+1;
       }
       middleIndex=(startIndex+stopIndex)>>>1;
     }
     return items[middleIndex]!=value ? false:true;
}

十六进制颜色值的随机生成:

function randomColor(){
 var arrHex=["0","2","3","4","5","6","7","8","9","a","b","c","d"],
     strHex="#",
     index;
     for(var i=0;i < 6; i++){
      index=Math.round(Math.random()*15);
      strHex+=arrHex[index];
     }
 return strHex;
}

一个求字符串长度的方法:

function GetBytes(str){
 var len=str.length,
     bytes=len;
 for(var i=0;i < len;i++){
   if(str.CharCodeAt>255){
     bytes++;
   }
 }
 return bytes;
}

js实现数组去重:

Array.protype.delRepeat=function(){
  var newArray=new Array();
  var len=this.length;
  for(var i=0;i < len;i++){
     for(var j=i+1;j < len;j++)
     {
       if(this[i]==this[j])
       {
         ++i;  
       }
     }
    newArray.push(this[i]);
  }
 return newArray;
}

插入排序。所谓的插入排序,就是将序列中的第一个元素看成一个有序的子序列,然后不段向后比较交换比较交换。

function insertSort(arr){
  var key;
  for(var j = 1; j < arr.length ; j++){ 
      //排好序的
      var i = j - 1;
      key = arr[j];
      while(i >= 0 && arr[i] > key){  
          arr[i + 1] = arr[i];       
          i --;        
     }
     arr[i + 1] = key;
  }
 return arr;
}

选择排序。其实基本的思想就是从待排序的数组中选择最小或者最大的,放在起始位置,然后从剩下的数组中选择最小或者最大的排在这公司数的后面。

function selectionSort(data)
{
	var i, j, min, temp , count=data.length;
	for(i = 0; i < count - 1; i++) {
   		/* find the minimum */
   		min = i;
      	for (j = i+1; j < count; j++)
    	{    
			if (data[j] < data[min])
            { min = j;}
     	}
       	/* swap data[i] and data[min] */
      	temp = data[i];
     	data[i] = data[min];
    	data[min] = temp;
	}
	return data;
}

希尔排序,也称递减增量排序算法。其实说到底也是插入排序的变种。

function shellSort(array){
       var stepArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1]; // reverse()在维基上看到这个最优的步长较小数组
        var i = 0;
        var stepArrLength = stepArr.length;
        var len = array.length;
        var len2 =  parseInt(len/2);
        for(;i < stepArrLength; i++){
            if(stepArr[i] > len2){
                continue;
            }
            stepSort(stepArr[i]);
        }
        // 排序一个步长
        function stepSort(step){  
            //console.log(step) 使用的步长统计
            var i = 0, j = 0, f, tem, key;
            var stepLen = len%step > 0 ?  parseInt(len/step) + 1 : len/step; 
            for(;i < step; i++){// 依次循环列
                for(j=1;/*j < stepLen && */step * j + i < len; j++){//依次循环每列的每行
                    tem = f = step * j + i;
                    key = array[f];
                    while((tem-=step) >= 0){// 依次向上查找
                        if(array[tem] > key){
                            array[tem+step] = array[tem];
                        }else{
                            break;
                        }
                    }    
                    array[tem + step ] = key;
                }
            }
        }
        return array;
}

快速排序。其实说到底快速排序算法就系对冒泡排序的一种改进,采用的就是算法理论中的分治递归的思想,说得明白点,它的做法就是:通过一趟排序将待排序的纪录分割成两部分,其中一部分的纪录值比另外一部分的纪录值要小,就可以继续分别对这两部分纪录进行排序;不段的递归实施上面两个操作,从而实现纪录值的排序。

function quickSort(arr,l,r){	
		if(l < r){			
			var mid=arr[parseInt((l+r)/2)],i=l-1,j=r+1;			
			while(true){
				while(arr[++i] < mid);
				while(arr[--j]>mid);				
				if(i>=j)break;
				var temp=arr[i];
				arr[i]=arr[j];
				arr[j]=temp;
			}		
			quickSort(arr,l,i-1);
			quickSort(arr,j+1,r);
		}
		return arr;
}

冒泡法:

function bullSort(array){
	var temp;
	for(var i=0;i < array.length;i++)
	{
   		for(var j=array.length-1;j > i;j--){
     		if(array[j] < array[j-1])
			{
				temp = array[j];
				array[j]=array[j-1];
				array[j-1]=temp;
     		}
   		}
 	}
 	return array;
}

一些常见算法的JavaScript实现

标签:http   io   ar   color   使用   java   for   on   art   

原文地址:http://www.cnblogs.com/xiaoyang002/p/4109214.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!