数据结构与算法(python版)之查找

  • 一、顺序查找
  • 1.什么叫顺序查找
  • 2.顺序查找过程
  • 3.无序表的顺序查找代码
  • 4.无序表的顺序查找算法分析
  • 5.有序表的顺序查找算法分析
  • 6.有序表的顺序查找程序
  • 二、二分查找
  • 1.分析
  • 2.二分查找实现程序
  • 3.二分查找的递归实现
  • 4.二分查找的算法分析
  • 三、小结


一、顺序查找

1.什么叫顺序查找

  如果数据项保存在如列表这样的集合中,我们会称这些数据项具有线性或者顺序关系。
  在python list中,这些数据项的存储位置称为下标(index),这些下标都是有序的整数。
  通过下标,我们可以按照顺序来访问和查找数据项,这种技术称为“顺序查找”。

2.顺序查找过程

  先从列表的第一个数据项开始,按照下标增长的顺序,逐个比对数据项,如果到最后一个都未发现要查找的项,那么查找失败。

3.无序表的顺序查找代码

def sequentialSearch(alist,item):
    found=False
    pos=0
    while pos<len(alist) and not found:
        if alist[pos]==item:
            found=True
        else:
            pos=pos+1
    return found

print(sequentialSearch([1,2,3,4,5],5))

4.无序表的顺序查找算法分析

python获取列表序号 python怎么查找序列中的数字_python获取列表序号


python获取列表序号 python怎么查找序列中的数字_数据结构_02

python获取列表序号 python怎么查找序列中的数字_算法_03


python获取列表序号 python怎么查找序列中的数字_顺序查找_04

5.有序表的顺序查找算法分析

python获取列表序号 python怎么查找序列中的数字_python获取列表序号_05


python获取列表序号 python怎么查找序列中的数字_数据结构_06

6.有序表的顺序查找程序

def orderedSequentialSearch(alist,item):
    found=False
    pos=0
    stop =False
    while pos<len(alist) and not found and not stop:
        if alist[pos]==item:
            found=True
        else:
            if alist[pos]>item:
                stop=True
            else:
                pos=pos+1
    return found
print(orderedSequentialSearch([1,5,8],5))

二、二分查找

1.分析

python获取列表序号 python怎么查找序列中的数字_python获取列表序号_07

python获取列表序号 python怎么查找序列中的数字_数据结构_08

2.二分查找实现程序

def binarySearch(alist,item):
    first=0
    last=len(alist)-1
    found=False
    while first<=last and not found:
        #整除2
        midPoint=(first+last)//2
        if alist[midPoint]==item:
            found=True
        else:
            if item<alist[midPoint]:
                last=midPoint-1
            else:
                first=midPoint+1

    return found

print(binarySearch([0,1,2,8,13,17,19,32,42],3))
print(binarySearch([0,1,2,8,13,17,19,32,42],13))

python获取列表序号 python怎么查找序列中的数字_python_09

3.二分查找的递归实现

def binarySearchRecursive(alist,item):
    #递归结束条件可以是:
    #if len(alist)==1:
    #    return item==alist[0]
    if len(alist)==0:
        return False
    else:
        midPoint=len(alist)//2
        if item==alist[midPoint]:
            return True
        else:
            if item<alist[midPoint]:
                return binarySearchRecursive(alist[:midPoint],item)
            else:
                return binarySearchRecursive(alist[midPoint+1:],item)
print(binarySearchRecursive([0,1,2,8,13,17,19,32,42],3))

4.二分查找的算法分析

python获取列表序号 python怎么查找序列中的数字_顺序查找_10

python获取列表序号 python怎么查找序列中的数字_数据结构_11


python获取列表序号 python怎么查找序列中的数字_python获取列表序号_12


python获取列表序号 python怎么查找序列中的数字_算法_13

三、小结

python获取列表序号 python怎么查找序列中的数字_python_14