数据结构与算法 python版 顺序查找

数据结构与算法 python版 顺序查找

1)如果数据项保存在如列表这样的集合中,我们会称这些数据项 具有线

性或者顺序关系

2)在python list中 这些数据项的存储位置称为 下标,

这些下标都是有序的整数

3)通过下标,我们就可以按照顺序来访问和查找数据项,

这种技术称之为"顺序查找"

算法分析 要对查找算法进行分析,首先要确定其中基本计算步骤

回顾第二章算法分析的要点,这种基本计算步骤必须要足够简单,并且在

算法中反复执行

在查找算法中,这种基本计算步骤就是进行数据项的对比

当前数据项等于还是不等于要查找的数据项,比对的次数 决定了 算法复杂度

大O算法的表示法

就复杂度而言是O(n) ,只是在数据项不存在的时候 有序表的查找能节省一些对比次数,但并不改变其数量级, 都是O(N)
要么 O(1) 要么 O(n)

二分查找 BinarySearch

那么对于有序表,有没有更好更快的查找算法?

在顺序查找中, 如果第一个数据项不匹配 查找项的画,那最多还有n-1
个代比对的数据项

那么有没有方法利用有序表的特性 ,迅速缩小待比对数据项的范围呢

通过拿 item 与 范围中间数做比对 如果比 midpoint 大 +1

如果比mid point 小 就-1

缩小比对范围 重复循环比对
def binarySearch(alist,item):
first =0
last = len(alist)-1
found = False

   while first <= last  and not found:
  midpoint = (first+last)//2
  if item == midpoint:
  found =True
  elif item > midpoint:
  first = midpoint+1
  elif item < midpoint:
  last  = midpoint-1

  return found

alist =[ 13,45,56]

print(binarySearch(alist,16))

Ologn

冒泡排序 (BubbleSort)

冒泡排序的算法思路在于对无需表进行多趟比较交换

每趟包括多次两两相邻比较,并将逆序的数据项互换位置,最终能将本

趟的最大项九尾

经过n-1趟比较交换,实现整表排序

每趟的过程类似于旗袍在水中不断上浮到水面的经过

def BubbleSort(alist):
for passnum in range(len(alist) -1,0,-1):
   for i in range(passnum):
  if alist[i] > alist[i+1]:
 temp= alist[i]
 alist[i] = alist[i+1]
 alist[i+1] = temp
alist =[ 59,26,93,17]

BubbleSort(alist)

print(alist)

比对的时间复杂度为 O(n^2)

算法过程总需要n-1次,随着趟数的增加, 比对次数逐步从n-1到1

基准算法 如果比他好 效率差在 都需要经过多次的比对

选择排序(SelectionSort)

def selectionSort(alist):z
   for a in range(len(alist)-1,0,-1):
   posMax=0
   for loocation in range(1,a):
  if alist[loocation] > alist[posMax]:
 posMax = loocation

   temp = alist[a]
   alist[a] = alist[posMax]
   alist[a] =  temp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值