#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ARRAYSIZE 50
1. 顺序查找
int SeqSearch(int r[ ], int n, int k)
{ int i;
r[0]=k; i=n;
while (r[i]!=k)
i --;
return i;
}
2.二分查找(折半查找)(重点)
2.1 二分之前先排序
void shellSort (int r[ ], int n)
{ int i,j,d;
for (d=n/2; d>=1; d=d/2)
{
for (i=d+1; i<=n; i++)
{
r[0]=r[i];
j=i-d;
while (j>0 && r[0]<r[j])
{
r[j+d]=r[j];
j=j-d;
}
r[j+d]=r[0];
}
displayArray(r,n);
}
}
2.2 非递归算法
int BinSearch1(int r[], int n, int k)
{ int low,high,mid;
low=1; high=n;
while (low<=high)
{
mid=(low+high)/2;
if (k<r[mid]) high=mid-1;
else if (k>r[mid]) low=mid+1;
else return mid;
}
return 0;
}
2.3 递归算法
int BinSearch2(int r[ ], int low, int high, int k)
{ int mid;
if (low>high) return 0;
else {
mid=(low+high)/2;
if (k<r[mid])
return BinSearch2(r, low, mid-1, k);
else if (k>r[mid])
return BinSearch2(r, mid+1, high, k);
else return mid;
}
}