常用五种排序方法 冒泡排序、快速排序、插入排序、希尔排序、归并排序

常见排序时间复杂度和稳定行

 

冒泡排序、快速排序、插入排序、希尔排序、归并排序实现

#-*-coding:utf-8-*-
import random
list1 = [random.randint(1, 20) for i in range(10)]
print(list1)

# 冒泡排序(交换排序)
def maopao_sortt(list1):
    length = len(list1)
    for i in range(length):
        for j in range(i+1, length):
            if list1[i] > list1[j]:
                list1[i], list1[j] = list1[j], list1[i]
    return list1

# maopao_sortt(list1)
# print(list1)

# 快速排序(交换排序)
def quick_sort(list1, i, j):
    if i>=j:
        return list1
    pivot = list1[i]
    low, height = i, j
    while i < j:
        while i<j and list1[j] >= pivot:
            j -=1
        list1[i] = list1[j]
        while i<j and list1[i] <= pivot:
            i +=1
        list1[j] = list1[i]
    list1[j] = pivot
    quick_sort(list1, low, i-1)
    quick_sort(list1, i+1, height)
    return list1

# a = quick_sort(list1, 0, len(list1)-1)
# print(a)



# 插入排序(插入排序)
def insert_sort(list1):
    for i in range(1, len(list1)):
        key = list1[i]
        j = i - 1
        while j >= 0 and list1[j] > key:
            list1[j+1] = list1[j]
            j -= 1
        list1[j+1] = key

# insert_sort(list1)
# print(list1)

# 希尔排序(插入排序)
def shell_sort(list1):
    length = len(list1)
    dist = length//2
    while dist > 0:
        for i in range(dist, length):
            key = list1[i]
            j = i -dist
            while j >= 0 and list1[j] > key:
                list1[j + dist] = list1[j]
                j -= dist
            list1[j + dist] = key
        dist //= 2
# shell_sort(list1)
# print(list1)

# 归并排序(归并排序)
def merge(left, right):
    result = []
    while left and right:
       if left[0] < right[0]:
           result.append(left.pop(0))
       else:
           result.append(right.pop(0))
    if left:
        result += left
    if right:
        result += right
    return result


def merge_sort(list1):
    length = len(list1)
    if length <= 1:
        return list1
    mid = length // 2
    left, right = merge_sort(list1[:mid]), merge_sort(list1[mid:])
    a = merge(left, right)
    return a
a = merge_sort(list1)
print(a)

  

 

posted @ 2022-03-24 16:55  你看起来真的很好吃  阅读(286)  评论(0编辑  收藏  举报