python算法教程实例_Python实现七个基本算法的实例代码1.顺序查
当数据存储在诸如列表的集合中时,我们说这些数据具有线性或顺序关系。 每个数据元素都存储在相对于其他数据元素的位置。 由于这些索引值是有序的,我们可以按顺序访问它们。 这个过程产实现的搜索即为顺序查。
顺序查原理剖析:从列表中的第⼀个元素开始,我们按照基本的顺序排序,简单地从⼀个元素移动到另⼀个元素,直到到我们正在寻的元素或遍历完整个列表。如果我们遍历完整个列表,则说明正在搜索的元素不存在。
代码实现:该函数需要⼀个列表和我们正在寻的元素作为参数,并返回⼀个是否存在的布尔值。found 布尔变量初始化为 False,如果我们发现列表中的元素,则赋值为 True。
def search(alist,item):
find = False
cur = 0
while cur < len(alist):
if alist[cur] == item:
find = True
break
else:
cur += 1
return find
2.⼆分查
有序列表对于我们的实现搜索是很有⽤的。在顺序查中,当我们与第⼀个元素进⾏⽐较时,如果第⼀个元素不是我们要查的,则最多还有 n-1 个元素需要进⾏⽐较。
⼆分查则是从中间元素开始,⽽不是按顺序查列表。 如果该元素是我们正在寻的元素,我们就完成了查。 如果它不是,我们可以使⽤列表的有序性质来消除剩余元素的⼀半。
如果我们正在查的元素⼤于中间元素,就可以消除中间元素以及⽐中间元素⼩的⼀半元素。如果该
元素在列表中,肯定在⼤的那半部分。然后我们可以⽤⼤的半部分重复该过程,继续从中间元素开始,将其与我们正在寻的内容进⾏⽐较。
def search(alist,item):
left = 0
right = len(alist) - 1
find = False
while left <= right:
mid_index = (left + right)//2
if item == alist[mid_index]:
find = True
break
else:
if item > alist[mid_index]:
left = mid_index + 1
else:
right = mid_index -1
return find
3.冒泡排序
原理:
⽐较相邻的元素。如果第⼀个⽐第⼆个⼤,就交换他们两个。对每⼀对相邻元素做同样的⼯作,从开始第⼀对到结尾的最后⼀对。在这⼀点,最后的元素应该会是最⼤的数。针对所有的元素重复以上的步骤,除了最后⼀个。持续每次对越来越少的元素重复上⾯的步骤,直到没有任何⼀对数字需要⽐较。
def sort(alist):
length = len(alist)
for i in range(0,length-1):
for j in range(0,length-1-i):
if alist[i] > alist[i+1]:
alist[i],alist[i+1] = alist[i+1],alist[i]
4.选择排序
⼯作原理:第⼀次从待排序的数据元素中选出最⼩(或最⼤)的⼀个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻到最⼩(⼤)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序⽅法。
def sort(alist):
length = len(alist)
for j in range(length-1,0,-1):
max_index = 0
python基础代码实例for i in range(1,j+1):
if alist[max_index] < alist[i]:
ldap安装max_index = i
alist[max_index],alist[j] = alist[j],alist[max_index]
5.插⼊排序
原理:
基本思想是,每步将⼀个待排序的记录,按其关键码值的⼤⼩插⼊前⾯已经排序的⽂件中适当位置上,直到全部插⼊完为⽌。关键码是数据元素中某个数据项的值,⽤它可以标⽰⼀个数据元素。
def sort(alist):
length = len(alist)
for j in range(1,length):
i = j
while i > 0:
if alist[i] < alist[i-1]:
alist[i],alist[i-1] = alist[i-1],alist[i]
i -= 1
else:
break
希尔排序(Shell"s Sort)是插⼊排序的⼀种⼜称“缩⼩增量排序”(Diminishing Increment Sort),是直接插⼊排序算法的⼀种更⾼效的改进版本。希尔排序是⾮稳定排序算法。
active中文是什么意思该⽅法的基本思想是:先将整个待排元素序列分割成若⼲个⼦序列(由相隔某个“增量(gap)”的元素组成的)分别进⾏直接插⼊排序,然后依次缩减增量再进⾏排序,待整个序列中的元素基本有序(增量⾜够⼩)时,再对全体元素进⾏⼀次直接插⼊排序。因为直接插⼊排序在元素基本有序的情况下(接近最好情况),效率是很⾼的,因此希尔排序在时间效率⽐直接插⼊排序有较⼤提⾼。
def sort(alist):
gap = len(alist)//2
while gap >= 1:
for j in range(gap,len(alist)):
i = j
while i > 0:
if alist[i] < alist[i-gap]:
alist[i],alist[i-gap] = alist[i-gap],alist[i]
i -= gap
else:
break
gap = gap // 2
6.快速排序
基本思想是:通过⼀趟排序将要排序的数据分割成独⽴的两部分,其中⼀部分的所有数据都⽐另外⼀部分的所有数据都要⼩,然后再按此⽅法对这两部分数据分别进⾏快速排序,整个排序过程可以递归进⾏,以此达到整个数据变成有序序列。
def sort(alist,start,end):
low = start
number怎么读
high = end
if low >= high:
return
mid = alist[low]
while low < high:
while low < high:
if alist[high] >= mid:
high -= 1
else:
alist[low] = alist[high]
break
while low < high:
if alist[low] < mid:
low += 1
else:
alist[high] = alist[low]
break
alist[low] = mid
sort(alist,start,low-1)
composer剪辑软件下载
sort(alist,high+1,end)
7.归并排序
归并排序(MERGE-SORT)是建⽴在归并操作上的⼀种有效的排序算法,该算法是采⽤分治法(Divide and Conquer)的⼀个⾮常典型的应⽤。将已有序的⼦序列合并,得到完全有序的序列;即先使每个⼦序列有序,再使⼦序列段间有序。
def merge_sort(alist):
n = len(alist)
#结束递归的条件
if n <= 1:
return alist
#中间索引
mid = n//2
maxwidth页面怎么设置宽度left_li = merge_sort(alist[:mid])
right_li = merge_sort(alist[mid:])
#指向左右表中第⼀个元素的指针
left_pointer,right_pointer = 0,0
#合并数据对应的列表:该表中存储的为排序后的数据
result = []
while left_pointer < len(left_li) and right_pointer < len(right_li):
#⽐较最⼩集合中的元素,将最⼩元素添加到result列表中

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。