概念明天补上。。。
顺序查找,用了哨兵,减少检查数组长度的次数,据说这样可以让顺序查找的性能提升一倍。
优点:无序任何假设条件(如数组有序等)。
缺点:效率低。
#include <stdio.h>
int ssearch(int* arr, int n, int key)
{
int i = 0;
arr[n] = key;
for(i=0;arr[i]!=key;i++);
if(i==n)
{
return -1;
}else {
return i;
}
}
int main()
{
int arr[9] = {5, 4, 7, 43, -42, 56, -1};
int key = -42;
int n = sizeof(arr) / sizeof(int) - 1; // Reserve last one for SHao Bing
printf("Search for 13: %d", ssearch(arr, n, key));
return 0;
}
二分查找:据说98%的程序员写不对,我这个是不是也有Bug呢?
#include <stdio.h>
int bsearch(int* arr, int n, int key)
{
int low = 0, high = n-1, mid = 0;
while(low<=high)
{
mid = (low+high)/2;
if(arr[mid]==key)
{
return mid;
} else if(arr[mid]<key)
{
low = mid + 1;
} else
{
high = mid - 1;
}
}
return -1;
}
int main()
{
int arr[8] = {1, 3, 5, 7, 9, 12, 18, 123};
int key = 12;
printf("Search for 13: %d", bsearch(arr, sizeof(arr)/sizeof(int), key));
return 0;
}