一些常见算法的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;
}
时间: 2024-08-02 07:01:28

一些常见算法的JavaScript实现的相关文章

冒泡排序算法的JavaScript实现

作为经典的排序算法之一,冒泡排序在JavaScript中也有多种实现方式. 在一些最常见的实现中会声明临时变量,在另一些不必声明临时变量的实现中则可能只支持数值数组或字符串数组(二者之一). 下面介绍两种[无须声明临时变量],[对数值数组和字符串数组都适用]的实现方式. ES5版: var arr = [5, 25, 2, 53, 22, 10]; function bubbleSort(arr) { for (var j = 1, len = arr.length; j < len; j++)

[转] js_常见算法

js模拟螺旋矩形算法 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-e

常见算法是js实现汇总(转载)

常见算法是js实现汇总 /*去重*/ <script> function delRepeat(arr){ var newArray=new Array(); var len=arr.length; for(var i=0;i<len;i++){ for(var j=i+1;j<len;j++) { if(arr[i]==arr[j]) { ++i; } } newArray.push(arr[i]); } return newArray; } var arr=new Array(&

acm常见算法及例题

转自:http://blog.csdn.net/hengjie2009/article/details/7540135 acm常见算法及例题 初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法

二分查找算法的 JavaScript 实现

二分查找在查找[指定值]在[有序]数据中的[位置]时是一种高效的算法. 以下仅提供 ES5 版本. var arr = [0, 2, 4, 27, 28, 54, 67, 74, 75, 79, 86, 97, 289, 290, 678] function binarySearch(arr, val) { var start = 0, end = arr.length - 1; while (start <= end) { var mid = Math.floor((start + end)

【JavaScript】【算法】JavaScript版排序算法

JavaScript版排序算法:冒泡排序.快速排序.插入排序.希尔排序(小数据时,希尔排序会比快排快哦) 1 //排序算法 2 window.onload = function(){ 3 var array = [0,1,2,44,4, 4 324,5,65,6,6, 5 34,4,5,6,2, 6 43,5,6,62,43, 7 5,1,4,51,56, 8 76,7,7,2,1, 9 45,4,6,7,8]; 10 //var array = [4,2,5,1,0,3]; 11 array

快速排序算法的 JavaScript 实现

快速排序是一种在大多数情况下比冒泡排序效率更高(详情参考有关算法复杂度的文章)的算法. 注意:许多编程语言内置的排序 API 底层实现便是基于快速排序. ES5 与 ES6 语法在实现该算法时区别不大,以下仅提供 ES5 版本. function quickSort(arr) { var len = arr.length; if (len <= 1) { return arr.slice(0); // 注意用 slice 可防范 arr[0] 为 undefined } var left = [

机器学习常见算法分类汇总

机器学习常见算法分类汇总 机器学习无疑是当前数据分析领域的一个热点内容.很多人在平时的工作中都或多或少会用到机器学习的算法.这里 IT 经理网为您总结一下常见的机器学习算法,以供您在工作和学习中参考. 机器学习的算法很多.很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的.这里,我们从两个方面来给大家介绍,第一个方面是学习的方式,第二个方面是算法的类似性. 学习方式 根据数据类型的不同,对一个问题的建模有不同的方式.在机器学习或者人工智能领域,人们首先会考虑算法的学习

前端常见算法JS实现

算法是程序的灵魂,一个优秀的前端工程师对算法也是要有所了解的. 排序算法 1. 冒泡排序 //冒泡排序 function bubbleSort(arr){ var i = j = 0; for(i=1;i<arr.length;i++){ for(j=0;j<=arr.length-i;j++){ var temp = 0; if(arr[j]>arr[j+1]){ temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } 2.