确定性,首先想到的就是在给定链表中 查找某数,直接采用顺序查找,非常简单。
定义一个查找方法,然后调用查找具体某数。
def search(list, key):
length = len(list)
for i in range(0,length):
if list[i] == key:
return i+1
return False
if __name__ == '__main__':
list = [123,56,78,39,89,90]
a = search(list, 39)
print("%s%s%s"%("目标数为数表中第",a,"个数"))
此方法方便理解,对表中数据从前到后查找,找到即输出。
然后,是c语言学习时,用到的二分查找(思路参考上一篇不确定算法)。该方法要求链表中元素从左到右,依次增大。这就要求对表中元素进行排序,用到排序算法。排序用到的是冒泡排序。
def search_2(list, key):
length = len(list)
first = 0
last = length - 1
while first <= last:
mid = (last + first) // 2
if list[mid] > key:
last = mid - 1
elif list[mid] < key:
first = mid + 1
else:
return mid+1
return False
def Sort(nums):
for i in range(len(nums)-1):
for j in range(len(nums)-i-1):
if nums[j] > nums[j+1]:
nums[j], nums[j+1] = nums[j+1], nums[j]
return nums
if __name__ == '__main__':
list = [11,89,999,39,46,47]
Sort(list)
print(list)
result = search_2(list, 39)
print("%s%s%s"%("目标数为数表排序后第",result,"个数"))
该方法还有不足:不能得到目标数在原来表中的位置,只能得到排序后的位置,对这一问题暂时还没有想到解决办法,在以后学习中会慢慢解决。