python10大排序算法

找工作面试必然会被问排序的,很重要

冒泡排序、选择排序都属于交换排序,时间复杂度为n**2

插入排序、快速排序属于插入排序

 

def bubbleSort(lista):

    """
    冒泡:没写对哦
    len(arr)-1次循环;
    从0到len(arr)-1-i变量,满足条件相邻交换;n**2
    后面的先排序好;
    """
    l = len(lista)
    for i in range(l-1):
        for j in range(l-i-1):
            if lista[j+1] < lista[j]:
                lista[j+1],lista[j]=lista[j],lista[j+1]
    return alista
def selectSort(lista):
    """
    选择排序:
    len(arr)-1次循环;
    循环找最值,最值交换,n**2
    前面的先排序好
    """
    l = len(lista)
    for i in range(l-1):
        index = i
        for j in range(i+1,l):
            if lista[j] < lista[i]:
                index = j
        if index!= i:
            lista[i],lista[index]=lista[index],lista[i]
    return lista

def insertSort(lista):
    """
    插入排序:
    遍历一遍
    若遍历到的值比前面值小,则交换直至该次遍历满足preIndex>=0和arr[preIndex]>current;
    """
    for i in range(1,len(lista)):
        preIndex = i - 1
        current = lista[i]
        while preIndex >= 0 and lista[preIndex]>current:
            lista[preIndex+1] = lista[preIndex]
            preIndex -= 1
        lista[preIndex+1] = current
    return lista

def quickSort(lista,left=None,right=None):
    """
    快速排序:
    递归的,每次将比基准值小的插入pivot前面,pivot+1,比基准值大的不动,做好排序
   pivot 左边再做一遍,pivot右边再做一遍
    """
    left = 0 if not instance(left,(int,float)) else left
    right = len(lista)-1 if not instance(right,(int,float)) else right
    if left<right:
        partitionIndex = partition(lista,left,right)
        quickSort(lista,left,partitionIndex-1)
        quickSort(lista,partitionIndex+a,right)
    return lista
def partition(lista,left,right):
    pivot = left
    i = left + 1
    while i <= right:
        if arr[i]< arr[pivot]:
            temp = arr[i]
            index = i
            while index >= pivot:#仅需插入到pivot前面,pivot+1
                index -= 1
                arr[index+1] = arr[index]
            arr[pivot] = temp
            pivot += 1
        i += 1
    return pivot

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值