数据结构—顺序查找和二分查找
原理:参考趣学数据结构
代码:
#include<stdio.h>
#include<stdlib.h>
int n;//查找元素数组的长度
void seqCheckValue1(int* a) {//顺序查找1,有越界判断int v = a[0];for (int i = 1; i < n; i++) {if(a[i]==v){printf("查找成功!\n\n");return;}}printf("查找失败!\n");
}
void seqCheckValue2(int* a) {//顺序查找2,没有越界判断,可以缩减一半的判断语句int v = a[0];int i;for ( i = n -1; a[i]!=v ; i--) {}if (i == 0) {printf("查找失败!\n");}else {printf("查找成功!\n\n");}
}
void biaCheckValue1(int* a,int v,int l, int r) {//顺序查找1,非递归查找int i = l, j = r;while (i <= j) {int mid = (i + j) / 2;if (a[mid] == v) {printf("查找成功!\n\n");return;}else if (a[mid] < v) {j = mid - 1;}else {i = mid + 1;}}printf("查找失败!\n");
}
void biaCheckValue2(int* a, int v,int l, int r) {//顺序查找2,递归查找int i = l, j = r;while (i <= j) {int mid = (i + j) / 2;if (a[mid] == v) {printf("查找成功!\n\n");return;}else if (a[mid] < v) {biaCheckValue2(a, v,l, mid - 1);}else {biaCheckValue2(a, v,mid+1, l);}}printf("查找失败!\n");
}
int main() {int a[5] = { 6,4,5,6,8 };int b[5] = { 3,4,5,6,8 };n = sizeof(a) / sizeof(a[0]);printf("查找方式1!\n");seqCheckValue1(a);printf("查找方式2!\n");seqCheckValue2(a);printf("查找方式3!\n");biaCheckValue1(b,5,0,n-1);printf("查找方式4!\n");biaCheckValue2(b, 5, 0, n - 1);printf("\n");system("pause");return 0;
}
测试截图:
顺序查找
时间复杂度O(n),空间复杂度O(1)
二分查找
非递归 时间复杂度O(logn),空间复杂度O(1)
递归 时间复杂度O(1),空间复杂度O(logn)栈空间
应用场景:
顺序查找用在无序数中,而二分搜索用在有序数中。