zoukankan      html  css  js  c++  java
  • 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("
    排序后的序列为:")
        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

  • 相关阅读:
    Redis常见数据类型
    MYSQL常见可优化场景
    算术切片
    找数组里没出现的数
    不同路径和(II)
    不同路径和
    最小路径和
    强盗抢房子
    丑数(2)
    判断子序列
  • 原文地址:https://www.cnblogs.com/crystal1126/p/12877202.html
Copyright © 2011-2022 走看看