有序数组二分查找的变形,代码如下:

#include<stdio.h>
#include<stdlib.h>int main() {int *array = (int *)malloc(sizeof(int)*16);int i;for(i = 0; i < 16; i++) {*(array + i) = (i+5) % 16;}int ret = search(array, 16, 10);printf("%d", ret);return 0;
}int isOrdered(int *array, int begin, int end) {return *(array+end) > *(array+begin) ? 1 : 0;
}int contains(int *array, int begin, int end, int theNum) {return theNum >= *(array + begin) && theNum <= *(array + end) ? 1 : 0;
}int CyclicOrderedBinarySearch(int *array, int begin, int end, int theNum) {if(begin == end) {if(*(array + begin) == theNum) {return begin;    } else {return -1;  }}int mid = (begin + end) / 2;    if(isOrdered(array, begin, mid)) {if(contains(array, begin, mid, theNum)) {return CyclicOrderedBinarySearch(array, begin, mid, theNum); } else {return CyclicOrderedBinarySearch(array, mid + 1, end, theNum); }} else {if(contains(array, mid + 1, end, theNum)) {return CyclicOrderedBinarySearch(array, mid + 1, end, theNum);} else {return CyclicOrderedBinarySearch(array, begin, mid, theNum);    }}return -1;
}int search(int *array, int n, int theNum) {return CyclicOrderedBinarySearch(array, 0, n - 1, theNum);
}

  

转载于:https://www.cnblogs.com/igloo1986/p/4160965.html

[算法] 循环有序数组查找递归实现相关推荐

  1. Search in Rotated Sorted Array - 循环有序数组查找问题

    两道题 33. Search in Rotated Sorted Array https://leetcode.com/problems/search-in-rotated-sorted-array/ ...

  2. 循环有序数组中查找某个数

    循环有序数组中查找某个数 利用二分查找,  一个循环有序数组从中间切分,一定分成一个有序数组和一个循环有序数组,由于循环有序数组不容易判断,我们只需判断哪一边是有序数组以及target是不是在有序数组 ...

  3. 有序数组二分查找java_详解Java数据结构和算法(有序数组和二分查找)

    一.概述 有序数组中常常用到二分查找,能提高查找的速度.今天,我们用顺序查找和二分查找实现数组的增删改查. 二.有序数组的优缺点 优点:查找速度比无序数组快多了 缺点:插入时要按排序方式把后面的数据进 ...

  4. 算法006:二分查找 递归、非递归

    题目: 已知一个有序数组arr 给定需要搜索的元素,返回索引,若无则返回-1思路: 递归和非递归 1.代码如下 BinSearch .java: package com.yuhl.right;/*** ...

  5. LeetCode算法 删除有序数组中的重复项 删除有序数组中的重复项|| C++

    目录 题目 删除有序数组中的重复项 参考答案 题目 删除有序数组中的重复项|| 参考答案 题目 删除有序数组中的重复项 给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ...

  6. 二维“有序”数组查找问题

    题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否包含了该整数. 例:下面的二维数组就是每 ...

  7. 剑指offer 二维有序数组查找

    题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. java 解决方案:暴 ...

  8. leetcode算法题--有序数组中的单一元素

    原题链接:https://leetcode-cn.com/problems/single-element-in-a-sorted-array/ 使用二分查找法,索引是偶数则应后面一个相等,索引为奇数则 ...

  9. php 查找所有函数,PHP(方法 函数 循环 和 数组 查找)

    Oralce sysaux WRH$_ACTIVE_SESSION_HISTORY清理 In this Document Symptoms Cause Solution References Symp ...

最新文章

  1. R语言If、Else条件语句实战
  2. IBInspectable / IBDesignable
  3. springboot中如何添加第三方的jar包或者说如何配置本地jar
  4. RabbitMQ 上手记录-part 1-基础概念
  5. Quartz2D简单绘制之不规则形状
  6. 使用Mac终端设置alias常用别名,以git提交为例
  7. php 设置excel格式,PHPExcel为文件格式设置特定标头
  8. 英语语音识别_英语 语音识别_英语语音识别软件 - 云+社区 - 腾讯云
  9. 谷歌设置支持webgl
  10. fastText、TextCNN、TextRNN……这里有一套NLP文本分类深度学习方法库供你选择
  11. 用Java+xml配置方式实现Spring数据事务(编程式事务)
  12. 线性反馈移位寄存器实现产生伪随机数M序列
  13. 最强社工必备查询网址汇总
  14. 用envi对遥感影像进行规则裁剪
  15. 苹果iOS第三方应用商店,App store没有的这都有!发烧友赶紧来!
  16. 使用镜像服务站下载CentOS安装包
  17. Linux 内核软死锁(soft lockup)记录
  18. c语言正切值怎么表示,C语言中正切的相关函数总结
  19. pom.xml详解撸一下基础
  20. 网银UKey登录数据签名和验签流程

热门文章

  1. 使用vmware12安装Ubuntu 遇到的两个问题和解决
  2. tp中url地址大小写问题
  3. ReactJS入门学习一
  4. java.util.concurrent.atomic原子操作类包
  5. f5在运营商计费系统中的版本升级割接详细步骤
  6. Baidu-Rpc中Pb结构转为Json
  7. ug装配绕轴旋转_UG绘制小吊扇模型,建模装配还能运动起来
  8. php mysql中华图书购物商城
  9. aes js 加盐值 解密_cryptoJS AES 加解密简单使用
  10. pid控制从入门到精通pdf_《PID整定指导》白皮书——PID领域的葵花宝典来袭!