O(lgn)查找算法问题
问题是这样的:
给定一个随机排列的序列,找出其中某个元素的位置--有没有比O(n)更快的算法?比如O(lgn)?
(问题来源:http://learn.akae.cn/media/ch11s05.html)
我使用归并排序的分治思想写了一个算法:
#include <stdio.h>#include <string.h>char a[] = "hello world";int indexof(int start, int end, char letter){ int mid, i; if (start < end) { mid = (start + end) / 2; indexof(start, mid, letter); indexof(mid+1, end, letter); for (i = start; i < end; i++) if (a[i] == letter) return i; } return -1;}int main(void){ printf("%d %d\n", indexof(0, strlen(a), 'o'), indexof(0, strlen(a), 'z')); return 0;}