Python:关于有序序列元素查找

Python034

Python:关于有序序列元素查找,第1张

1 引言

有序序列元素查找是python算法中典型且重要的技能,通过对有序序列元素查找的学习,我们可以更快的解决关于有序序列查找的相关问题,也可以更好的体现出我们的解题思维逻辑能力和提高代码水平。

查找元素。一般地,我们可以用for循环进行遍历,再用if语句进行查找。相对于for循环,二分法更加方便。二分法思想 对于已按照关键字排序的序列,经过一次比较后,可将序列分割成两部分,然后只在有可能包含待查找元素的一部分中继续查找,并根据试探结果继续分割,逐步缩小查找范围,直至找到或找不到为止。

2 问题描述

示例:如何查找有序序列中某一的元素

输入:[1,2,3,4,5,6,……,100] 61 #查找的元素

输出:61

3 算法描述

在这里我们主要使用二分法查找。二分法主要是与给定的一列序数中的中位数进行比较,然后再选取范围进行查找。如在[1,2,3,4,……,100]中查找61。先取1—100之间的中位数50进行比较,因为50比61小,所以排除1—50之间的数,再用51—100之间的中位数75进行比较,因为75大于61‘所以排除75—100的元素。然后反复地用这个方法排除多余的元素,直到剩下需要查找的元素(61)。

4 结语

有序序列中元素的查找有两种方法:一是用for循环进行遍历查找。二是二分法进行查找。对于会执行很多次的查找时采用二分法比较方便。

附件

def my_func(my_list, searched_number): #二分法

start_number_index = 0

end_number_index = len(my_list) - 1

while start_number_index <= end_number_index:

mid_number_index = (start_number_index = end_number_index) // 2

mid_number = my_list[mid_number_index]

if mid_number <searched_number:

start_number_index = mid_number_indexn+ 1

elif mid_number >searched_number:

end_number_index = mid_number_index - 1

else:

return '找到了需要查找的数字%d'% searched_number

my_list = list(range(1,101))

searched_number = 61

print(my_func(my_list, mid_number))# 结果 找到了需要查找的数字 61

def prime(n):

    if n<=2:

        return []

    result=[False,False]+[True]*(n-2)

    for i in range(len(result)):

        if result[i]==True:

            for j in range(2*i,len(result),i):

                result[j]=False

    return [i for i in range(len(result)) if result[i]==True]

def bi_search(prime,primelist,start,end):

    if start>end :

        return -1

    mid=(start+end)//2

    if primelist[mid]==prime:

        return mid

    elif primelist[mid]>prime:                

        end=mid-1

    else:

        start=mid+1

    return bi_search(prime,primelist,start,end)

if __name__=='__main__':

    n=int(raw_input())

    primelist=prime(n)

    num=raw_input()

    while num:

        num=int(num)

        index=bi_search(num,primelist,0,len(primelist)-1)

        print(index)

        num=raw_input()

#!/usr/bin/env python  

import sys   

  

def search2(a,m):  

    low = 0   

    high = len(a) - 1   

    while(low <= high):  

        mid = (low + high)/2  

        midval = a[mid]  

      

        if midval < m:  

            low = mid + 1   

        elif midval > m:  

            high = mid - 1   

        else:  

            print mid   

            return mid   

    print -1  

    return -1  

  

if __name__ == "__main__":  

    a = [int(i) for i in list(sys.argv[1])]  

    m = int(sys.argv[2])  

    search2(a,m)