1)顺序查找
/*包含头文件*/
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <math.h>
#include <time.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20
typedef int Status;
typedef struct
{
int data[MAXSIZE];
int length;
}SeqList;
/*顺序查找算法*/
int SequenceSearch(SeqList *seqList,int key)
{
int i;
//遍历顺序表
for (i=0;i<seqList->length;i++)
{
//找到该元素
if (seqList->data[i]==key) return i;
}
//没有找到
return -1;
}
/*打印结果*/
void Display(SeqList *seqList)
{
int i;
printf("\n**********展示结果**********\n");
for (i=0;i<seqList->length;i++)
{
printf("%d ",seqList->data[i]);
}
printf("\n**********展示完毕**********\n");
}
#define N 9
void main()
{
int i,j;
SeqList seqList;
//定义数组和初始化SeqList
int d[N]={
50,10,90,30,70,40,80,60,20};
for (i=0;i<N;i++)
{
seqList.data[i]=d[i];
}
seqList.length=N;
printf("***************顺序查找***************\n");
Display(&seqList);
j=SequenceSearch(&seqList,70);
if (j!=-1) printf("70在列表中的位置是:%d\n",j);
else printf("对不起,没有找到该元素!");
getchar();
}
2)二分查找
二分查找也属于顺序表查找范围,二分查找也称为折半查找。二分查找(有序)的时间复杂度为O(LogN)。
1.待查找的列表必须有序。
2.必须使用线性表的顺序存储结构来存储数据。
/*包含头文件*/
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <math.h>
#include <time.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20
typedef int Status;
typedef struct
{
int data[MAXSIZE];
int length;
}SeqList;
/*二分查找算法(折半查找)*/
int BinarySearch(SeqList *seqList,int key)
{
/*下限*/
int low=0;
/*上限*/
int high=seqList->length-1;
while(low<=high) /*注意下限可以与上限重合的*/
{
int middle=(low+high)/2;
/*判断中间记录是否与给定值相等*/
if (seqList->data[middle]==key)
{
return middle;
}
else
{
/*缩小上限