返回第一次出现,或最后一次出现 int low = -1; int up = n; while (low + 1 != up) { int m = (low + up) / 2; #ifndef LAST if (strncmp(a[m], t, strlen(t)) < 0) #else if (strncmp(a[m], t, strlen(t)) <= 0) #endif low = m; else up = m; } #ifndef LAST if (up >= n || strncmp(a[up], t, strlen(t)) != 0) printf("not found /"%s/"/n", t); else printf("/"%s/" first appears in suffix array: %s/n", t, a[up]); #else if (low < 0 || strncmp(a[low], t, strlen(t)) != 0) printf("not found /"%s//n"", t); else printf("/"%s/" last appears in suffix array: %s/n", t, a[low]); #endif 修改过的二分搜索,目标不存在的话,返回刚刚大于目标的下标 ; 存在的话返回目标下标。 //做了修改的二分搜索算法,若要查找的数w在长为len的数组b中存在则返回下标, //若不存在,则返回b数组中的刚刚大于w的那个元素的下标,该元素即需要被替换的元素 int BiSearch(int *b, int len, int w) { int left = 0, right = len-1; int middle; while(left <= right) { middle = (left+right)/2; if(b[middle] > w) right = middle - 1; else if(b[middle] < w) left = middle + 1; else return middle; } return (b[middle]>w) ? middle : middle+1; //即返回b数组中的刚刚大于w的那个元素的下标 }