python 快排,冒泡,二分

#算法
'''
快排
先从数列中取出一个数作为基准,然后将比概数打的数放到右边,比该书小的放到左边;再对左右区间重复上衣步骤

'''

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))

猜你喜欢

转载自blog.csdn.net/qq_35810838/article/details/82937128
今日推荐