/* * Motif Tools Library, Version 3.1 * $Id: BSearch.c,v 1.1.1.1 2001/07/18 11:06:01 root Exp $ * * Written by David Flanagan. * Copyright (c) 1992-2001 by David Flanagan. * All Rights Reserved. See the file COPYRIGHT for details. * This is open source software. See the file LICENSE for details. * There is no warranty for this software. See NO_WARRANTY for details. * * $Log: BSearch.c,v $ * Revision 1.1.1.1 2001/07/18 11:06:01 root * Initial checkin. * * Revision 1.1 2001/06/12 15:00:21 andre * AA-2001-06-12-0: replaced Xmt212 by Xmt310 * (http://sourceforge.net/projects/motiftools) with * our xmt212 patches applied * * */ #include #if NeedFunctionPrototypes int XmtBSearch(StringConst target, String *list, int num) #else int XmtBSearch(target, list, num) StringConst target; String *list; int num; #endif { int half = num/2; int result; /* do a linear search if there aren't may keywords left */ /* avoids the overhead of recursion */ if (num <= 4) { for(num--; num >= 0; num--) if (strcmp(target, list[num]) == 0) break; return num; } /* otherwise do a binary search */ result = strcmp(target, list[half]); if (result == 0) return half; else if (result < 0) return XmtBSearch(target, list, half); else { result = XmtBSearch(target, &list[half+1], num-half-1); if (result != -1) result += half+1; return result; } }