数据结构---顺序查找和二分查找
生活随笔
收集整理的這篇文章主要介紹了
数据结构---顺序查找和二分查找
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據結構—順序查找和二分查找
原理:參考趣學數據結構
代碼:
#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)棧空間
應用場景:
順序查找用在無序數中,而二分搜索用在有序數中。
如果存在什么問題,歡迎批評指正!謝謝!
總結
以上是生活随笔為你收集整理的数据结构---顺序查找和二分查找的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构---后序和中序遍历的二叉树序列
- 下一篇: 数据结构---BF字符串模式匹配