活动地址:CSDN21天学习挑战赛
CSDN—21天学习挑战赛—【经典算法】
学习专栏地址
文章
思路
思路:
-
1.将数组折半,分成左右两个数组。
-
2.判断要查找的数和中间位置数值的大小,来判断要查找的数实在哪一半。
-
3.之后继续折半查找,直至找到这个数。
-
折半插入排序算法的时间复杂度为
O(n^2)
实例实现
- 在将一个新元素插入已排好序的数组的过程中,寻找插入点时,
- 将待插入区域的首元素设置为 a[low] ,末元素设置为 a[high] ,
- 则每轮比较时将待插入元素与 a[m] ,其中 m = (low+high)/2 相比较,
- 如果比参考元素小,则选择a[low]到a[m-1]为新的插入区域(即high=m-1),
- 否则选择 a[m+1] 到 a[high] 为新的插入区域(即low=m+1),
- 如此直至low<=high 不成立,即将此位置之后所有元素后移一位,并将新元素插入a[high+1]。
1 function search(arr,key) {
2 var low=0;
3 var height=arr.length-1;
4 var mid;
5 while(low<=height){
6 mid=Math.floor((low+height)/2);
7 if(arr[mid]==key){
8 return mid;
9 }else if(arr[mid]<key){
10 low=mid+1;
11 }else{
12 height=mid-1;
13 }
14 }
15 return -1;
16 }
拓展
- 排序算法的概念:
是通过特定的算法因式将一组或多组数据按照既定模式进行重新排序。 最终序列按照一定的规律进行呈现。