我是靠谱客的博主 虚拟手机,最近开发中收集的这篇文章主要介绍golang语言的二分法查找和插入代码二分法查找,在有序数组中,查找应该使用此方法,注意for循环的退出条件。二分法插入,要保证插入时的稳定性,即元素相等时,后插入元素在后面。注意其对二分查找的改进,以及在切片指针插入元素时,使用append引发的错误。     二分法插入是插入排序的核心操作,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

二分法查找,在有序数组中,查找应该使用此方法,注意for循环的退出条件。

func binary_search(arr []int,target int) int {
	n := len(arr)
	if n< 1{
		return -1;
	}
	l,h :=0,n-1
	// 要等号,不要会有边界问题
    for l <= h {
		mid := (l+h) /2 
		if  arr[mid] ==  target{
			return  mid
		}else if arr[mid] < target{
			l = mid+1
		}else{
			h = mid-1
		}
	}
	return -1
}

二分法插入,要保证插入时的稳定性,即元素相等时,后插入元素在后面。注意其对二分查找的改进,以及在切片指针插入元素时,使用append引发的错误。

// 用到append函数,指针
func bianry_insert(arr *[]int,target int) {
    if len(*arr) < 1 {
		*arr = append(*arr,target)
		return
	}
	l,mid,h:=0,0,len(*arr)-1

	for l<=h{
		mid =(l+h) /2
		if (*arr)[mid] == target{
			// 微调,保证插入时稳定性
			// h =mid
			// l =mid+1
			h = mid + 1
			l = mid + 1
		}else if (*arr)[mid] < target{
			l =mid+1
		}else{
			h = mid-1
		}
	}
	// 插入到mid位置,mid位置必定是合法的
	// 但是mid找到和未找到时,是mid-1还是mid位置有问题
	// 以mid为准有问题,可以考虑h
	//  分析边界条件,在相等时简单,不相等时,退出循环时,l=h+1
	// if arr[mid] < target , l -1 = h =mid ;else l =mid = h +1
	//  arr[l],arr[h],关系, arr[h] <= t < arr[l],稳定插入时,应该是h+1位置
	fmt.Printf("h:%d n",h)
	// temp := append((*arr)[0:h+1],target)
	//  这是golang使用指针时,值覆盖了
	// *arr = append(temp,(*arr)[h+1:]...)
	*arr = append(*arr,0)
    for i:=len(*arr)-1;i>h+1;i--{
		(*arr)[i] = (*arr)[i-1]
	}
	(*arr)[h+1] = target;
}

     二分法插入是插入排序的核心操作

最后

以上就是虚拟手机为你收集整理的golang语言的二分法查找和插入代码二分法查找,在有序数组中,查找应该使用此方法,注意for循环的退出条件。二分法插入,要保证插入时的稳定性,即元素相等时,后插入元素在后面。注意其对二分查找的改进,以及在切片指针插入元素时,使用append引发的错误。     二分法插入是插入排序的核心操作的全部内容,希望文章能够帮你解决golang语言的二分法查找和插入代码二分法查找,在有序数组中,查找应该使用此方法,注意for循环的退出条件。二分法插入,要保证插入时的稳定性,即元素相等时,后插入元素在后面。注意其对二分查找的改进,以及在切片指针插入元素时,使用append引发的错误。     二分法插入是插入排序的核心操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部