基本的查找算法有:顺序查找,二分查找,
顺序查找很简答,就是遍历数组的每一个元素,通过与待查找到数进行比较来实现,一个for循环即可搞定。
顺序查找不需要对数组进行排序,缺点是执行效率低,耗时,因为要遍历。
二分查找是一个提高查找效率的方法,前提是数组有序,如果拿到一个无需的数组,首先要用排序算法(冒泡、选择、插入)来排序。
二分查找的利用的是二分法,即将数组有一分为二,一半一半的缩小对比范围。
二分法代码实现:
class Test { public static void Main() { int[] number=new int[]{11,22,33,44,55,66,77,88,99}; int sValue=33; int index; index=Dichotomy(number,sValue); Console.WriteLine("{0}", index); } public static int Dichotomy(int[] num,int sValue) { int upper=num.Length()-1; int lower=0; int mid= (upper+lower)/2; while( lower<=upper) { if(num[mid]==sValue) { return mid; //存在返回下标 } if(num[mid]>sValue) { upper=mid-1; } if(num[mid]<sValue) { lower=mid+1; } return -1;//不存在返回-1 }
public static int Rdichotomy(int[] num,int sValue,int lower,int upper)//递归法实现
{
if(lower>upper)
{
return -1;
}
else
{
if(num[mid]==sValue) { return mid; //存在返回下标 }
else if(num[mid]>sValue) {
int upper=num.Length()-1; int lower=0; int mid= (upper+lower)/2;
int[] num2=new int[]{upper-mid+1};
for(int i=0;i<upper-mid+1;i++)
{
num2[i]=num[lower+1+i];
}
dichotomy(int[] num2,int sValue,int lower+1,int upeer);
)
else if(num[mid]<sValue)
{
int upper=num.Length()-1; int lower=0; int mid= (upper+lower)/2;
int[] num2=new int[]{upper-mid+1};
for(int i=0;i<upper-mid+1;i++)
{
num2[i]=num[i];
}
dichotomy(int[] num2,int sValue,int lower+1,int upeer);
}
}
}