[算法] 循环有序数组查找递归实现
有序数组二分查找的变形,代码如下:
#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
[算法] 循环有序数组查找递归实现相关推荐
- Search in Rotated Sorted Array - 循环有序数组查找问题
两道题 33. Search in Rotated Sorted Array https://leetcode.com/problems/search-in-rotated-sorted-array/ ...
- 循环有序数组中查找某个数
循环有序数组中查找某个数 利用二分查找, 一个循环有序数组从中间切分,一定分成一个有序数组和一个循环有序数组,由于循环有序数组不容易判断,我们只需判断哪一边是有序数组以及target是不是在有序数组 ...
- 有序数组二分查找java_详解Java数据结构和算法(有序数组和二分查找)
一.概述 有序数组中常常用到二分查找,能提高查找的速度.今天,我们用顺序查找和二分查找实现数组的增删改查. 二.有序数组的优缺点 优点:查找速度比无序数组快多了 缺点:插入时要按排序方式把后面的数据进 ...
- 算法006:二分查找 递归、非递归
题目: 已知一个有序数组arr 给定需要搜索的元素,返回索引,若无则返回-1思路: 递归和非递归 1.代码如下 BinSearch .java: package com.yuhl.right;/*** ...
- LeetCode算法 删除有序数组中的重复项 删除有序数组中的重复项|| C++
目录 题目 删除有序数组中的重复项 参考答案 题目 删除有序数组中的重复项|| 参考答案 题目 删除有序数组中的重复项 给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ...
- 二维“有序”数组查找问题
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否包含了该整数. 例:下面的二维数组就是每 ...
- 剑指offer 二维有序数组查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. java 解决方案:暴 ...
- leetcode算法题--有序数组中的单一元素
原题链接:https://leetcode-cn.com/problems/single-element-in-a-sorted-array/ 使用二分查找法,索引是偶数则应后面一个相等,索引为奇数则 ...
- php 查找所有函数,PHP(方法 函数 循环 和 数组 查找)
Oralce sysaux WRH$_ACTIVE_SESSION_HISTORY清理 In this Document Symptoms Cause Solution References Symp ...
最新文章
- R语言If、Else条件语句实战
- IBInspectable / IBDesignable
- springboot中如何添加第三方的jar包或者说如何配置本地jar
- RabbitMQ 上手记录-part 1-基础概念
- Quartz2D简单绘制之不规则形状
- 使用Mac终端设置alias常用别名,以git提交为例
- php 设置excel格式,PHPExcel为文件格式设置特定标头
- 英语语音识别_英语 语音识别_英语语音识别软件 - 云+社区 - 腾讯云
- 谷歌设置支持webgl
- fastText、TextCNN、TextRNN……这里有一套NLP文本分类深度学习方法库供你选择
- 用Java+xml配置方式实现Spring数据事务(编程式事务)
- 线性反馈移位寄存器实现产生伪随机数M序列
- 最强社工必备查询网址汇总
- 用envi对遥感影像进行规则裁剪
- 苹果iOS第三方应用商店,App store没有的这都有!发烧友赶紧来!
- 使用镜像服务站下载CentOS安装包
- Linux 内核软死锁(soft lockup)记录
- c语言正切值怎么表示,C语言中正切的相关函数总结
- pom.xml详解撸一下基础
- 网银UKey登录数据签名和验签流程
热门文章
- 使用vmware12安装Ubuntu 遇到的两个问题和解决
- tp中url地址大小写问题
- ReactJS入门学习一
- java.util.concurrent.atomic原子操作类包
- f5在运营商计费系统中的版本升级割接详细步骤
- Baidu-Rpc中Pb结构转为Json
- ug装配绕轴旋转_UG绘制小吊扇模型,建模装配还能运动起来
- php mysql中华图书购物商城
- aes js 加盐值 解密_cryptoJS AES 加解密简单使用
- pid控制从入门到精通pdf_《PID整定指导》白皮书——PID领域的葵花宝典来袭!