继续复习,先复习简单的顺序和二分查找
函数原型
//顺序查找 int seqSearch(data_t s[], data_t Key, int n){ int i; i = 0; while (i < n && s[i] != Key) i++; if (s[i] == Key) return i; else return -1; } //对半查找-递归 int binarySearch_1(data_t s[], data_t x, int low, int high) { int mid; if (low > high) return -1; mid = (low + high) / 2; if (x == s[mid]) return mid; if (x < s[mid]) return (binarySearch_1(s, x, low, mid - 1)); else return (binarySearch_1(s, x, mid + 1, high)); } //对半查找-非递归 int binarySearch_2(data_t s[], data_t x, int n) { int mid, low, high; low = 0; high = n - 1; while (low <= n - 1) { mid = (low + high) / 2; if (s[mid] == x) return mid; else if (s[mid] < x) low = mid + 1; else high = mid - 1; } return -1; }
测试代码
int main(int argc, char *argv[]) { int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int i; //顺序查找 if ((i = seqSearch(a, 6, 10)) != -1) { printf("seqsearch: pos at %d ", i); } else { printf("seqsearch error, no this key "); } //对半查找-递归 if ((i = binarySearch_1(a, 6, 0, 9)) != -1) { printf("binarySearch_1: pos at %d ", i); } else { printf("binarySearch_1 error, no this key "); } //对半查找-非递归 if ((i = binarySearch_2(a, 6, 10)) != -1) { printf("binarySearch_2: pos at %d ", i); } else { printf("binarysearch_2 error, no this key "); } return 0; }
结果
seqsearch: pos at 6 binarySearch_1: pos at 6 binarySearch_2: pos at 6