[算法] 循环有序数组查找递归实现
2014-12-13 09:52
447 查看
有序数组二分查找的变形,代码如下:
#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); }
相关文章推荐
- [算法] 循环有序数组查找非递归实现
- 二分查找算法的递归、循环实现及其缺陷
- KT学算法(二)——循环有序数组查找指定元素
- 整数型的有序递增数组循环右移x位后,查找指定整数 算法
- 【合并两个有序的子数组】算法实现
- 【数据结构与算法基础】以数组实现的循环队列 / Circular Queue implemented by array
- 二分查找 递归实现 和 循环实现
- 二分查找的两种实现(循环与递归)
- 算法训练 区间k大数查询(数组复制、排序算法、递归查找)
- 【百度面试题】循环有序数组的查找问题
- 漫谈递归:二分查找算法的递归实现
- 循环有序数组中的二分查找 Search in a rotated sorted array
- 部分有序中查找给定值-【百度面试题】循环有序数组的查找问题
- C语言实现 二分查找数组中的Key值(递归和非递归)
- 怎样编写一个程序,把一个有序整数数组放到二叉树中? 编写实现链表排序的一种算法。说明为什么你会选择用这样的方法?
- 在一个循环有序的数组里查找特定值
- 【百度面试题】循环有序数组的查找问题
- 循环有序数组查找问题
- 一些常用算法[数组全排列算法,单链表反转(递归实现),字符串反转,桶排序]
- 实现有序列表(基于数组,二分查找)