#算法
'''
快排
先从数列中取出一个数作为基准,然后将比概数打的数放到右边,比该书小的放到左边;再对左右区间重复上衣步骤
'''
def qsort(seq):
if seq==[]:
return []
else:
pivot=seq[0]
lesser=qsort([x for x in seq[1:] if x<pivot])
greater=qsort([x for x in seq[1:] if x>=pivot])
return lesser+[pivot]+greater
if __name__=='__main__':
seq=[5,6,78,9,0,-1,2,3,-65,12]
print(qsort(seq))
#冒泡
'''
比较两个相邻的元素,然后进行排序,但是效率非常低,始终保持第一个为最小的
'''
def bubblesort(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
seq=[5,6,78,9,0,-1,2,3,-65,12]
print(bubblesort(seq))
'''
二分法算法原理:数组是有序数组,
确定该期间的中间位置center将查找的值key与array[center]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。
新区域的确定:如果key>arrey[center],则起始位置变为center+1,结束位置不变
如果key<arrey[center],则结束位置变为center-1,起始位置不变
每一次查找与中间值比较,可以确定是否查找成功,不成功当前查找区间缩小一半。递归找,即可。
'''
def binarysearch(arr,key):
start=0
end=len(arr)-1 #最后一个元素的索引
if key in arr:
while True:
center=int((start+end)/2) #(第一个索引+最后一个索引)/2
if arr[center]>key:
end=center-1
elif arr[center]<key:
start=center+1
elif arr[center]==key:
print(str(key)+'在数组里面的第'+str(center)+' 个位置')
return arr[center]
else:
print('没有该数字')
if __name__=='__main__':
arr=[1,2,9,12,14,16,18,23,34,56,78]
while True:
key=input('请输入要查找的数字:')
if key=='':
print('谢谢使用')
break
else:
binarysearch(arr,int(key))