我就不信你看完还学不会顺序查找和折半查找的算法

简介: 我就不信你看完还学不会顺序查找和折半查找的算法

目录



前言

小白求关注呜呜呜!



1.实现顺序查找

代码如下(示例):

#include<stdio.h>
#include<malloc.h>
#define MAXL 100
typedef int KeyType;
typedef char InfoType;
typedef struct
{
  KeyType key;
  InfoType data;
} RecType;
void CreateList(RecType R[],KeyType keys[],int n)
{
  for(int i = 0;i<n;i++)
  R[i].key=keys[i];
}
void DispList(RecType R[],int n)
{
  for(int i=0;i<n;i++)
     printf("%d",R[i].key);
  printf("\n");
}
#include"seqlist.cpp"
int SeqSearch(RecType R[],int n,KeyType k)
{
  int i=0;
  while(i<n&&R[i].key!=k)
  {
    printf("%d",R[i].key);
    i++;
  }
  if(i>=n)return 0;
  else
  {
    printf("%d",R[i].key);
    return i+1;
  }
}
int main()
{
  RecType R[MAXL];
  int n=10,i;
  KeyType k =5;
  int a[]={3,6,2,10,1,8,5,7,4,9};
  CreateList(R,a,n);
  printf("关键字序列:");DispList(R,n);
  printf("查找%d所比较的关键字:\n\t",k);
  if((i=SeqSearch(R,n,k))!=0)
     printf("\n元素%d的位置是%d\n",k,i);
  else
     printf("\n元素%d不在表中\n",k);
  return 1;
}


2.实现折半查找

代码如下(示例):

#include<stdio.h>
#include<malloc.h>
#define MAXL 100
typedef int KeyType;
typedef char InfoType;
typedef struct
{
  KeyType key;
  InfoType data;
} RecType;
void CreateList(RecType R[],KeyType keys[],int n)
{
  for(int i = 0;i<n;i++)
  R[i].key=keys[i];
}
void DispList(RecType R[],int n)
{
  for(int i=0;i<n;i++)
     printf("%d",R[i].key);
  printf("\n");
}
#include"seqlist.cpp"
int BinSearch(RecType R[],int n,KeyType k)
{
  int low =0,high=n-1,mid,count =0;
  while(low<=high)
  {
    mid =(low+high)/2;
    printf("  第%d次比较:在[%d,%d]中比较元素R[%d];%d\n",
    ++count,low,high,mid,R[mid].key);
    if(R[mid].key==k)
      return mid+1;
    if(R[mid].key>k)
      high=mid-1;
    else
      low=mid+1;
  }
  return 0;
}
int main()
{
  RecType R[MAXL];
  KeyType k=9;
  int a[]={1,2,3,4,5,6,7,8,9,10},i,n=10;
  CreateList(R,a,n);
  printf("关键字序列:");DispList(R,n);
  printf("查找%d的比较过程如下:\n",k);
  if((i=BinSearch(R,n,k))!=-1)
     printf("元素%d的位置是%d\n",k,i);
  else
     printf("元素%d不在表中\n",k);
  return 1;
}



总结

我是不会飞的飞鸟,如果文章对你有帮助就点赞关注,谢谢!


相关文章
|
算法 Java
折半查找算法[二分查找法]算法的实现和解决整数溢出问题~
折半查找算法[二分查找法]算法的实现和解决整数溢出问题~
|
存储 算法
【查找算法】折半查找法
【查找算法】折半查找法
|
1月前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
18 0
|
算法 C语言
C语言:使用 普通方法 和 二分查找算法(折半查找算法) 在一个有序数组中查找具体的某个数字n-2
第一步: (1). 设置初始数组:int arr[]。 (2). 生成相关变量: int n = 0; -- 存放从键盘输入的要查找的值; int i = 0; -- 循环变量;
|
6月前
|
算法
【408数据结构与算法】—折半插入排序(十六)
【408数据结构与算法】—折半插入排序(十六)
|
算法 C语言
C语言-折半查找(二分查找)算法详解
C语言-折半查找(二分查找)算法详解
171 0
|
搜索推荐 算法
深入浅出排序算法之直接插入排序(拓展:折半插入排序)
深入浅出排序算法之直接插入排序(拓展:折半插入排序)
|
算法 C语言
C语言:使用 普通方法 和 二分查找算法(折半查找算法) 在一个有序数组中查找具体的某个数字n-1
思路一:普通方法 (逻辑简单,在无序数组中也可以使用,但效率较低,需要逐个查找) 总体思路:
100 0