首页 > 代码库 > 一些常见算法的JavaScript实现

一些常见算法的JavaScript实现

在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实现