热门IT资讯网

Python实现排序算法2

发表于:2024-11-29 作者:热门IT资讯网编辑
编辑最后更新 2024年11月29日,4.希尔排序# -*- coding:utf-8 -*-def shell_sort(alist): """希尔排序""" n = len(alist) gap = n // 2

4.希尔排序

# -*- coding:utf-8 -*-def shell_sort(alist):    """希尔排序"""    n = len(alist)    gap = n // 2    while gap >= 1:        for j in range(gap,n):            i = j            while i > 0:                if alist[i] < alist[i-gap]:                    alist[i],alist[i-gap] = alist[i-gap],alist[i]                    i -=gap                else:                    break        gap //= 2if __name__ == "__main__":    a = [6,86,3,5,0,43,90,100]    print(a)    shell_sort(a)    print(a)# [6, 86, 3, 5, 0, 43, 90, 100]# [0, 3, 5, 6, 43, 86, 90, 100]

5.快速排序

# -*- coding:utf-8 -*-def quick_sort(alist,first,last):    """快速排序"""    if first >= last:        return    # n = len(alist)    mid_value = alist[first]    low = first    high = last    while low < high:        #High左移        while low = mid_value:            high -= 1        alist[low] = alist[high]        # Low右移        while low 

6.归并排序

# -*- coding:utf-8 -*-def merge_sort(alist):    """归并排序"""    n = len(alist)    if n <= 1:        return alist    mid =n // 2    left_alist = merge_sort(alist[:mid])    right_alist = merge_sort(alist[mid:])    left_pointer,right_pointer = 0,0    result = []    while left_pointer < len(left_alist) and right_pointer < len(right_alist):        if left_alist[left_pointer] < right_alist[right_pointer]:            result.append(left_alist[left_pointer])            left_pointer += 1        else:            result.append(right_alist[right_pointer])            right_pointer += 1    result += left_alist[left_pointer:]    result += right_alist[right_pointer:]    return  resultif __name__ == "__main__":    a = [6, 86, 3, 5, 0, 43, 90, 10]    print(a)    sorted_list = merge_sort(a)    print(sorted_list)# [6, 86, 3, 5, 0, 43, 90, 10]# [0, 3, 5, 6, 10, 43, 86, 90]
0