[code=csharp]
#include <stdio.h>
//线性查找
int LinearSearch(int arr[], int n, int val)
{
for (int i = 0; i < n; i++)
{
if (arr[i] == val)
{
return i;
}
}
return -1;
}
//二分查找法,前提是元素已经有序
int BinarySearch(int arr[], int n, int val)
{
int left = 0, right = n - 1;
while (left <= right)
{
int mid = (left + right) / 2; //这一句要在循环内,不然循环的条件(即查找的范围)得不到收敛
if (arr[mid] < val) //待查找值在右侧
{
left = mid + 1; //待查数组左边界进行修正
}
else if (arr[mid] == val) //待查找值已经找到
{
return mid; //返回索引
}
else //待查找值在左侧
{
right = mid - 1;
}
}
}
int main(int argc, char const *argv[])
{
int arr[] = { 1,2,3,4,5,10,12,16,19 };
int n = 9;
//printf("%d", LinearSearch(arr, n, 5));
printf("%d", BinarySearch(arr, n, 16));
return 0;
}
[/code]