python算法-冒泡排序、选择排序、快速排序、二分查找

1、冒泡排序

它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

list1=[2,5,1,4,6,3,7]
#冒泡排序由小到大
def  bubblesort(list):
    for i in range(0,len(list)):
        for j in range(0,len(list)-i-1):
            if(list[j]>list[j+1]):
              list[j],list[j+1]=list[j+1],list[j]
    return list

print(bubblesort(list1))

 

2、选择排序

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

list1=[2,5,1,4,6,3,7]
#选择排序由小到大
def  choosesort(list):
    for i in range(0,len(list)):
        min_index=i
        for j in range(i+1,len(list)):
            if(list[j]<list[min_index]):
                list[j],list[min_index]=list[min_index],list[j]
    return list

print(choosesort(list1))

3、快速排序

参考:https://zhuanlan.zhihu.com/p/63227573

def quick_sort(lists,start,end):
    if start >= end:
        return list
    else:
        pivot = lists[start]#设置基准数
        i,j=start,end
        while i < j:
            while i < j and lists[j] >= pivot:
                j -= 1
            lists[i] = lists[j]
            while i < j and lists[i] <= pivot:
                i += 1
            lists[j] = lists[i]
        lists[j] = pivot
        quick_sort(lists, start, i - 1)
        quick_sort(lists, i + 1, end)
        return lists

if __name__=="__main__":
    lists=[30,24,5,58,18,36,39,12,42,39]
    print("排序前的序列为:")
    for i in lists:
        print(i,end =" ")
    print("\n排序后的序列为:")
    for i in quick_sort(lists,0,len(lists)-1):
        print(i,end=" ")

4、二分查找

def binnerFind(arr, key):
    start=0
    end=len(arr)-1
    while start<=end:
        mid=(start+end)//2
        if arr[mid]==key:
            return mid
        elif arr[mid]>key:
            end=mid-1
        elif arr[mid]<key:
            start=mid+1
    return -1

arr= [3, 6, 12, 17, 25, 32, 43, 55]
print("索引为:%s"%binnerFind(arr, 25))
print("索引为:%s"%binnerFind(arr, 199))

参考:https://www.runoob.com/python3/python3-examples.html

posted on 2020-05-12 16:51  crystal1126  阅读(243)  评论(0编辑  收藏  举报

导航