算法分析与设计实践3

1.     问题

写出两种检索算法:在一个排好序的数组T[1..n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0。

2.     解析

第一种:顺序查找。将给定列表中连续元素和给定的查找建进行比较,直到遇到一个匹配的元素,则查找成功,否则说明查找建不在列表中。

第二种:二分查找。对于一个从小到大排序的有序数组。将n个元素分成两部分,取a[n/2]与查找键x进行比较。如果a[n/2]==x,则找到,如果a[n/2]>x,则主要在数组a的左半部分查找,如果a[n/2]<x,则主要在数组a的右半部分查找。

3.     设计

顺序查找:

for j=1-n{

        if a[j]==x{

        输出j

        flag=1;

        break;

        }

}

if flag==0

输出j=0

 

二分查找:

int binarySearch(int a[],int n,int x){

           int left=0;

           int right=n-1;

           while(left<=right){

                   int middle=(left+right)/2;

                 if 查找键大于中值

                   left=middle+1;

                 else if 查找建小于中值

                   right=middle-1;

                 else

                   返回中值下标

        }

        返回-1

}

 

4.     分析

顺序查找:O(n)

 

 

 

 

 

 

二分查找:O(log2n)

 

 

 

 

 

 

5.     源码

github地址:https://github.com/122cmy/myGitTemp3

博客地址:https://www.cnblogs.com/122cmy/

posted @ 2021-03-28 16:41  小月爱写代码  阅读(39)  评论(0)    收藏  举报