`
yiminghe
  • 浏览: 1460344 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Arrays.binarySearch 的javascript实现

阅读更多

曾经研究过二分搜索的各种变种:

二分法 的 扩展

 

 

今天无意中看了下 JDK 中二分搜索的实现,确实很精巧,特别是返回插入点的设计很不错!用javascript实现下哦:

 

<script type="text/javascript">

/*
	please sort first
	如果找到返回查找值所在索引
	否则返回-(x+1) (插入点 x : , -(x+1) 防止 x=0的插入点 与 找到的情况矛盾))
	
	则判断某值是否存在只需判断 返回值 >=0 即可
*/
Array.prototype.binarySearch=function(v){
	
	var l=0;
	var h=this.length-1;
	while(l<=h) {
		//注:位操作javascript不一定提高效率
		var m=(l+h)>>>1;
		if(this[m]===v) {
			return m;
		}
		if(this[m]>v) {
			h=m-1;
		}	else {
			l=m+1;
		}
	}
	
	return -(l+1);	
}


var t=[1,10,18,7,5,12,398,52];
t.sort(function(x,y){
	return x-y;
});
alert("Array : "+t);

alert("Array : "+t+"\n"+"7 @index :"+t.binarySearch(7));

alert("Array : "+t+"\n"+"12 @index :"+t.binarySearch(12));


//重新计算得回 插入点
alert("Array : "+t+"\n"+"13 should insert :"+ (0-t.binarySearch(13)-1))

//fine ,let's insert

t.splice((0-t.binarySearch(13)-1),0,13);

alert("Array : "+t+"\n"+"now 13 @index :"+t.binarySearch(13));

</script>
 

 

 

分享到:
评论

相关推荐

    java的Arrays类的应用.doc

    - `Arrays.binarySearch()`方法实现了二分查找算法,用于在已经排序的数组中查找特定元素。如果找到,返回元素的索引;否则,返回一个负数,该负数的绝对值表示插入元素的位置。例如,`Arrays.binarySearch(array1,...

    JAVA中工具类Arrays和异常处理的实例操作.doc

    另外,`Arrays.binarySearch()`方法执行二分查找,它在已排序的数组中查找指定的元素,并返回其索引,如果找不到则返回负数。 异常处理是Java中处理程序运行时错误的关键机制。它允许我们优雅地捕获和管理可能出错...

    Learning.JavaScript.Data.Structures.and.Algorithms.1783554878

    Finally, we will round off by learning how to differentiate between various searching and sorting algorithms such as sequential search, binary search, quick sort, bubble sort, and so on, and how to ...

    javauseddevelop

    - `Arrays.binarySearch(array, aInt)` 在排序后的数组中查找指定元素,返回索引或特殊值。 - `Arrays.fill(array)` 用指定值填充整个数组。 - `Arrays.equals(array1, array2)` 比较两个数组的内容是否完全相同。 ...

    查询一个指定字符在数组里的索引,返回索引

    int index = Arrays.binarySearch(arr, target); if (index &gt;= 0) { return index; } else { return -1; // 表示未找到 } } ``` 在JavaScript中,可以使用`Array.prototype.indexOf`: ```javascript ...

    python3.6.5参考手册 chm

    The json module: JavaScript Object Notation The plistlib module: A Property-List Parser ctypes Enhancements Improved SSL Support Deprecations and Removals Build and C API Changes Port-Specific ...

    示例代码.rar

    此外,示例代码还可能包含有关算法的实现,如排序(比如"bubble_sort.py"或"quick_sort.c")和搜索(如"binary_search.js")。理解并能够实现这些基本算法对于提升编程技能和解决问题的能力至关重要。 数据库操作也...

    php.ini-development

    The following is a summary of its search order: ; 1. SAPI module specific location. ; 2. The PHPRC environment variable. (As of PHP 5.2.0) ; 3. A number of predefined registry keys on Windows (As of ...

    Draw-My-Code:用于可视化算法的Web应用程序

    画我的代码用于可视化算法的Web应用程序描述: 一个用于对某些算法进行可视化的React Web应用程序。 对于某些程序员而言,学习通用算法的最大问题是他们无法直观地了解这些算法的工作原理。 该Web应用程序使您可以...

Global site tag (gtag.js) - Google Analytics