python 排序方式 冒泡,选择,插入,希尔排序,快速排序,归并排序

本人初学小白,如有问题,请大佬不吝赐教!!!

'''
#冒泡排序
def bubble_sort(nums):
    for i in range(len(nums)-1):
        for j in range(len(nums)-1-i):
            if nums[j]>nums[j+1]:
                nums[j],nums[j+1]=nums[j+1],nums[j]
    return nums
h=bubble_sort([1,3,5,7,2,4,6,8])
'''
'''
#选择排序
def select_sort(nums):
    for i in range(len(nums)-1):
        premin,preminindex=nums[i],i
        for j in range(i+1,len(nums)):
            if nums[j]<premin:
                premin,preminindex=nums[j],j
        if preminindex!=i:
            nums[preminindex],nums[i]=nums[i],premin
    return nums
h=select_sort([1,3,5,7,2,4,6,8])
'''
'''
#插入排序
def insert_sort(nums):
    for j in range(len(nums)):
        i=j
        while i>0:
            if nums[i]<nums[i-1]:
                nums[i],nums[i-1]=nums[i-1],nums[i]
                i-=1
            else:
                break
    return nums
h=insert_sort([1,3,5,7,2,4,6,8])
'''
'''
#希尔排序
def shell_sort(nums):
    n=len(nums)
    gap=n//2
    
    while gap>0:
        for j in range(gap,n):
            i=j
            while i>0:
                if nums[i]<nums[i-gap]:
                    nums[i],nums[i-gap]=nums[i-gap],nums[i]
                    i-=gap
                else:
                    break
        gap//=2
    return nums
h=shell_sort([1,3,5,7,2,4,6,8])
'''
'''
#快速排序
def quick_sort(nums,first,last):
    if first>=last:
        return
    low=first
    high=last
    mid_value=nums[first]
    while low<high:
        while low<high and nums[high]>=mid_value:
            high-=1
        nums[low]=nums[high]
        while low<high and nums[low]<mid_value:
            low+=1
        nums[high]=nums[low]
    # #从循环退出时,low==high
    nums[low]=mid_value
    #对low左边的列表执行快速排序
    quick_sort(nums,first,low-1)
    #对low右边的列表执行快速排序
    quick_sort(nums,low+1,last)
    return nums
h=quick_sort([1,3,5,7,2,4,6,8],0,7)
''' 
#归并排序
def merge_sort(nums):
    n=len(nums)
    mid=n//2
    if len(nums)<=1:
        return nums
    l_list=merge_sort(nums[:mid])
    r_list=merge_sort(nums[mid:])
    l_point,r_point=0,0
    res=[]
    while l_point<len(l_list) and r_point<len(r_list):
        if l_list[l_point]<r_list[r_point]:
            res.append(l_list[l_point])
            l_point+=1
        else:
            res.append(r_list[r_point])
            r_point+=1
    res+=l_list[l_point:]
    res+=r_list[r_point:]
    return res
h=merge_sort([1,3,5,7,2,4,6,8]) 

猜你喜欢

转载自blog.csdn.net/ustbclearwang/article/details/81412399