数据结构与算法之整体有序数组的查找
2017-03-05 15:53
302 查看
一个组数整体上是有序的(或者说是循环有序),需要找到其中的某个元素
假设数组整体是升序的,基于二分查找算法实现如下:
非递归实现(C语言)
递归实现(C语言)
假设数组整体是升序的,基于二分查找算法实现如下:
非递归实现(C语言)
int search(int a[],int length,int target) { int low = 0; int high = length-1; while(low <= high) { int mid=low + (high - low)/2 if(a[mid] == target) { return mid; } else if(a[mid+1] <= a[high]) { if(a[mid+1] < target < a[high]) { low = mid + 1 } else if(a[mid+1] == target) { return mid + 1; } else if(a[high] == target) { } return high; else { high = mid -1; } } else if(a[mid-1] >= a[low]) { if(a[mid-1] > target > a[low]) { high = mid - 1 } else if(a[mid-1] == target) { return mid - 1; } else if(a[low] == target) { return low; } else { low = mid +1; } } } return -1; }
递归实现(C语言)
int search(int a[],int low,int high,int target) { if(low > high) return -1; int mid= low + (high - low)/2; if(a[mid] == target) { return mid; } else if(a[mid+1] <= a[high]) { if(a[mid+1] == target) { return mid +1; } else if(a[high] == target) { return high; } else if(a[mid+1] < target < a[high]) { return search(a,mid+1,high,target) } } else if(a[mid-1] >= a[low]) { if(a[mid-1] == target) { return mid -1; } else if(a[low] == target) { return low; } else if(a[low] < target < a[mid-1]) { return search(a,low,mid-1,target) } } }
相关文章推荐
- 微软等数据结构+算法面试100题(39)-- 左旋数组中查找
- 算法题之有序数组被折断后的查找
- 算法3.2 二分查找(基于有序数组)(algs4)
- 数据结构中的折半查找,查找对象为有序数组。用getchar()在写出输入字母输出相应的大小写。
- (核心算法)查找某个数在有序数组中(递增,含重复)第一次出现的下标
- 【数据结构】算法9.2 有序表查找-折半查找
- 详解Java数据结构和算法(有序数组和二分查找)
- 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
- [算法] 循环有序数组查找非递归实现
- 有序数组的查找(个人感觉美到极致的一个算法)
- (算法)旋转有序数组中查找某个数
- 字符串算法——查找有序数组旋转后的最小值(无重复元素)(Find Minimum in Rotated Sorted Array)
- 微软等数据结构+算法面试100题(5)--怎样编写一个程序,把一个有序整数数组放到二叉树中
- 算法与数据结构面试题(14)-在数组中查找2个数的和为已知数
- 算法—8.有序数组中的二分查找
- 个人练习数据结构之--------------关于线性数据的有序数组以及之上的二分法查找、不同排序方法的学习
- 算法分析之二维有序数组查找
- 字符串算法——查找有序数组旋转后最小值(有重复元素)(Find Minimum in Rotated Sorted Array II)
- 算法:有序数组删除重复元素,和查找等值键的问题
- 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组