python版 排序算法

165 阅读1分钟

python版本排序苏算法,抽空先撸了下冒泡排序,选择排序,插入排序,归并排序,快排排序,后续补全堆排序,基数和计数排序 `

def maopao_sort(nums: List[int]):
    n = len(nums)
    for i in range(n):
        flag = False
        for j in range(1, n-i):
            if nums[j-1] > nums[j]:
                nums[j], nums[j-1] = nums[j-1], nums[j]
                flag = True
        if not flag:
            return
    return

def select_sort(nums:List[int]):
    n = len(nums)
    for i in range(n):
        min = i
        for j in range(i+1, n):
            if nums[i] > nums[j]:
                min = j
        if min != i:
            nums[i], nums[min] = nums[min], nums[i]


def insert_sort(nums:List[int]):
    n = len(nums)
    for i in range(1, n):
        temp = nums[i]
        index = i
        for j in range(i-1, -1, -1):
            if nums[j] > temp:
                nums[j+1] = nums[j]
            else:
                index = j+1
                break
        nums[index] = temp

def merge_sort(nums:List[int]):
    n = len(nums)
    if n <= 1:
        return
    def merge(a, b):
        result = []
        m = len(a)
        n = len(b)
        i,j = 0, 0
        while i < m and j < n:
            if a[i] <= b[j]:
                result.append(a[i])
                i += 1
            else:
                result.append(b[j])
                j += 1
        if i < m:
            result.extend(a[i:])
        if j < n:
            result.extend(b[j:])
        return  result
    def merge_sort_s(start, end):
        if start == end:
            return [nums[start]]
        mid = (start + end)//2
        a1 = merge_sort_s(start, mid)
        b1 = merge_sort_s(mid+1, end)
        return merge(a1, b1)
    return merge_sort_s(0, n-1)
def quick_sort(nums:List[int]):
    n = len(nums)
    def patition(start, end):
        if start == end:
            return start
        qivot = nums[end]
        index = start
        for i in range(start, end):
            if nums[i] < qivot:
                nums[i],nums[index] = nums[index], nums[i]
                index += 1
        nums[index], nums[end] = nums[end],nums[index]
        return index
    def quick(start, end):
        if start >= end:
            return
        p = patition(start, end)
        quick(start, p-1)
        quick(p+1, end)
    quick(0, n-1)

`