首页 > 代码库 > [算法] 循环有序数组查找
[算法] 循环有序数组查找
有序数组二分查找的变形,代码如下:
#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);}
[算法] 循环有序数组查找
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。