python 实现基础排序

刷力扣发现很吃力,好多基础排序很模糊,趁着界面不忙碌总结一下基础排序

# -*- coding:utf-8 -*-
# auther="金木水火"
'''经典排序'''
import random

'''
#冒泡排序
1.比较相邻的数据,按照倒序/顺序,交换值
2.对所有相邻的数据都进行1的操作得到一个最大/最小的数据
3.针对所有数据重复2的步骤,排除最后一个数得到排序的数据
'''

def bubbleSort(L):
    '''
    时间复杂度:O(n2),循环37次
    空间复杂度:O(n)
    变量交换,将最大放到第一位
    '''
    m = 1
    if not isinstance(L,list) or len(L)<2:
        print('不支持或者无需排序')
    for i in range(len(L)-1):
        for j in range(i+1,len(L)):
            if L[i]0:
            m +=1
            # 如果当前元素和有序的最后一个元素比较不满足条件本次循环直接跳出,说明不需要调整当前数据
            if L[j] < L[j-1]:#有序左边开始比较
                L[j],L[j-1] =L[j-1],L[j]
                j -= 1
            else:
                break
    print(m)
    print(L)
def bubbleSort(L):
    '''
    插入排序优化:希尔排序
    时间复杂度: O(n2),循环26次
    空间复杂度:O(n)
    实现逻辑:
    1.序列长度取模,总是默认第一个模是有序的,其他是无序的
    2.对无序序列循环,得到当前的元素
    3.对有序序列循环,将2中元素从左边开始对比,按照条件交换值
    4.对序列循环取模,直到模为0

    '''
    m = 1
    if not isinstance(L, list) or len(L) < 2:
        print('不支持或者无需排序')
    maxlen=len(L)
    mod=maxlen//2 #取模运算
    while mod >0:
        for i in range(mod,maxlen):
            j=i
            while j >0:
                m +=1
                if L[j] = end:
        return
    mid_value = alist[start]
    low = start
    high = end
    while low < high:
        while low < high and alist[high] >= mid_value:
            high -= 1
        mid_value=alist[low]
        alist[low] = alist[high]
        alist[high] = mid_value
        while low < high and alist[low] <=mid_value:
            low += 1
        mid_value =alist[high]
        alist[high] = alist[low]
        alist[low]  =mid_value
    #alist[low] = mid_value
    quick_sort(alist, start, low-1)
    # 对基准元素右边的子序列进行快速排序
    quick_sort(alist, low+1, end)
def merge(left,right):
    '''
    归并:1. left,right 需要归并的两个序列
         2. 比较left,right两边序列的元素,
            满足条件的就放到零时序列
         3. 将临时序列返回
    '''
    tmp = list()
    i,j=0,0
    while  i 

你可能感兴趣的:(python 实现基础排序)