zoukankan      html  css  js  c++  java
  • [算法] 循环有序数组查找递归实现

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

    #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);
    }
    

      

  • 相关阅读:
    docker与虚拟机性能比较
    CAP原则(CAP定理)、BASE理论
    CAP 定理的含义
    JVM监测分析JConsole
    JConsole详解
    jconsole工具使用
    轻松看懂Java字节码
    JVM 虚拟机字节码指令表
    深入理解java虚拟机(六)字节码指令简介
    大话+图说:Java字节码指令——只为让你懂
  • 原文地址:https://www.cnblogs.com/igloo1986/p/4160965.html
Copyright © 2011-2022 走看看