顺序数组中查找数见得放发有两个:
- 顺序查找:
顺序查找就是对数组进行遍历,在便利的过程中进行查找。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a[] = { 1,2,3,4,5,6,7,8,9 };
//确定数组的大小,以及循环次数
int size = sizeof(a);
int x;
printf("请输入你需要查找的数字:");
scanf("%d", &x);
int i = 0;
//进行循环查找
while (i <size)
{
if (a[i] == x)
{
printf("你要查找的数字在第%d位!\n", i + 1);
break;
}
++i;
}
//若循环完成,没有查找到需要的数字
if (i == size)
{
printf("数组中没有你要查找的数字!\n");
}
system("pause");
return 0;
}
实验结果:
- 二分查找法:
二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x。
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main()
{
int arry[] = { 1,2,3,4,5,6,7,9 };
int x;
printf("请输入需要查找的数字:");
scanf("%d", &x);
//确定数组第一个数的下标
int left = 0;
//确定数组最右一个数的下标
int right = sizeof(arry) / sizeof(0) - 1;
//创建用来查找的中间值
int mid;
while (left <= right)
{
//找到数组中间的位置
mid = (right + left) / 2;
//如果中间值等于需要查找的值就打印出下标,并退出
if (arry[mid] == x)
{
printf("需要查找的数的下标是:%d!\n", mid);
system("pause");
return 0;
}
//如果需要查找的数值比中间值大,就将left右移,重新进行判断
if (arry[mid] < x)
{
left = mid + 1;
continue;
}
//如果查找的数值比中间值小,就将right左移,重新给mid赋值,进行判断
if (arry[mid] > x)
{
right = mid - 1;
continue;
}
}
//如果数组中没有查找的数字,打印结果,并退出
printf("数组中没有你需要查找的数!\n");
system("pause");
return 0;
}
实验结果: