折半(二分)查找、插入相关问题

简介: 折半(二分)查找、插入相关问题

704. 折半查找(二分)

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,
写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

输入: nums = [-1,0,3,5,9,12], target = 9

输出: 4

解释: 9 出现在 nums 中并且下标为 4

注意 此题说明是查找,那么数组中一定有target数,所以,我写了if(target==nums[mid]){

return mid;//返回数组下标

}

int search(int* nums, int numsSize, int target){//nums是数组,size是数组的大小,target是需要查找的值
    int low,high,mid;//low左边,high右边,mid中间
    low = 0;//赋初值,指向最左
    high = numsSize-1;//指向最右
    while(low<=high){//这里写的不一样,会直接影响后面代码
        mid = low+(high-low)/2;//为了防止溢出
        if(target==nums[mid]){
            return mid;//返回数组下标
        }
        if(target>nums[mid] ){
            low = mid+1; 
        }
        if(target<nums[mid]){
            high = mid -1;
        }
    }
    return -1;
}

折半插入(二分)

基本思想

折半插入排序,又称二分插入排序,先用折半查找1找到应该插入的位置,再移动元素

步骤(从小到大排序)

找到没有排序的元素

标记元素

对前面排好序的元素进行折半,low、high 上下界,mid标记为中间的元素

将标记元素与 mid 位置上的元素进行比较,如果标记元素<mid 位置上的元素,则应该插入到mid 的左边,high=mid-1;如果标记元素>mid 位置上的元素,则应该插入到 mid 的右边,low=mid+1。重复第3步

当 low>high 时停止折半查找,将[low,i-1]内的元素全部右移,并将标记元素插入到 low 所指的位置

例如:有数组nums = [-1,0,3,9];插入元素x= 5;

示意图:

void blnsertsort(int* nums, int numsSize, int x) {
    int low = 0;
    int high = sumSize - 1;
    int mid = 0;
    while (low <= high) {
        mid = low + (high - low) / 2;//防止溢出
        if (x > nums[mid])
            low = mid + 1;
        else//x小于后者等于nums[mid]
            high = mid - 1;
    }
    //此时high<low;high+1为插入位置
    for (int i = sumSize - 1; i > high; --i) {//后移
        nums[i + 1] = nums[i];
    }
    nums[high + 1] = x;//c插入x
}

*个人理解,如有不同见解,敬请指出!

相关文章
|
10月前
|
机器学习/深度学习
数据结构实验之查找四:二分查找
数据结构实验之查找四:二分查找
【Leetcode -1609.奇偶树 -1122.数组的相对排序】
【Leetcode -1609.奇偶树 -1122.数组的相对排序】
64 0
|
机器学习/深度学习
P2249 【深基13.例1】查找(二分查找)
P2249 【深基13.例1】查找(二分查找)
129 0
|
7月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
10月前
【力扣】83. 删除排序链表中的重复元素、82. 删除排序链表中的重复元素Ⅱ
【力扣】83. 删除排序链表中的重复元素、82. 删除排序链表中的重复元素Ⅱ
|
10月前
|
算法 测试技术 C#
C++二分查找或并集查找:交换得到字典序最小的数组
C++二分查找或并集查找:交换得到字典序最小的数组
|
10月前
|
机器学习/深度学习
数据结构实验之查找一:二叉排序树
数据结构实验之查找一:二叉排序树
|
10月前
|
算法 程序员 索引
【算法训练-二分查找 一】【基本二分】二分查找、在排序数组中查找元素的第一个和最后一个位置
【算法训练-二分查找 一】【基本二分】二分查找、在排序数组中查找元素的第一个和最后一个位置
82 0