python ,各种排序算法

1.冒泡排序

import random
def bubbleSort(a):
    length=len(a)
    for i in range(length-1):
        for j in range(length-i-1):
            if a[j] > a[j+1]:
                 a[j], a[j + 1] = a[j + 1], a[j]  #自动拆包
            print("第",i,"轮第",j,"次",a)

a=list(range(6))
random.shuffle(a)  #打乱顺序
print('原始值:',a)
bubbleSort(a)
print('排序后结果:',a)

结果展示:

2.选择排序

#选择排序   
#在arr中从start开始查一个最大值的索引号
def findMaxIndex(arr,start):
    maxIndex=start
    j=start+1
    length=len(arr)
    while(j<length):
        if arr[j]>arr[maxIndex]:
            maxIndex=j
        print("第",j,"次查找的结果:",maxIndex)
        j+=1
    return maxIndex

def selectSort(arr):
    length=len(arr)
    for i in range(length-1):
        print("第",i,"轮排序")
        maxIndex=findMaxIndex(arr,i)     
        arr[maxIndex],arr[i]=arr[i],arr[maxIndex]
        print("排序后的结果:",arr)

a=list(range(6))
random.shuffle(a)  #打乱顺序
print('原始值:',a)
selectSort(a)

结果展示:

3.插入排序

import random
def insertSort(arr):
    i=1
    length=len(arr)
    while(i<length):
        nextItem=arr[i]
        j=i
        print("第",i,"轮排序")
        while(j>0 and arr[j-1]<nextItem):
            print("第",i,"轮排序中找到要插入的位置:",j)
            arr[j]=arr[j-1]
            j-=1
        arr[j]=nextItem #将nextItem插入到合适的位置
        print("第",i,"轮排序后的数组:",arr)
        i+=1
        print('排序后的结果:',arr)
        
a=list(range(6))
random.shuffle(a)  #打乱顺序
print('原始值:',a)
insertSort(a)

4.希尔排序

def shellSort(arr):
    gap=int(len(arr)/2)  #增量   
    while gap>0:
        print("每轮开始的数组",arr)
        print("增量为:",gap)
        insertSort(arr,gap)
        print("增量为",gap,"时排好序的数组:",arr)
        gap=int(gap/2)   # 
    return arr
        
def insertSort(arr,gap):
    i=gap
    length=len(arr)
    while(i<length):
        nextItem=arr[i]
        j=i
        print("第",i,"轮排序")
        while(j>=gap and arr[j-gap]<nextItem):
            print("第",i,"轮排序中找到要插入的位置:",j)
            arr[j]=arr[j-gap]
            j=j-gap
        arr[j]=nextItem #将nextItem插入到合适的位置
        print("第",i,"轮排序后的数组:",arr)
        i+=1

a=list(range(6))
random.shuffle(a)  #打乱顺序
print('原始值:',a)
print("排序后的结果:",shellSort(a))

5.归并排序

#   如何合并两个有序的数值
import random
import math
def merge_sort(arr):
    if len(arr) <= 1 : 
        return arr
    #num = int(len(arr)/2)       #二分分解
    num=math.trunc(len(arr)/2)
    left = merge_sort(arr[:num])
    right = merge_sort(arr[num:])
    print('拆分的左排序数组:',left)
    print('拆分的右排序数组:',right)
    return merge(left,right)    #合并数组

def merge(a,b):
    h=j = 0          #left与right数组的下标指针
    c = []
    while j<len(a) and h<len(b):
        if a[j] < b[h]:
            c.append(a[j])
            j += 1
        else:
            c.append(b[h])
            h += 1
    if j == len(a):
        for i in b[h:]:
            c.append(i)
    else:
        for i in a[j:]:
            c.append(i)
    print('将a',a,'与b','合并排序后:',c)
    return c

a=list(range(6))
random.shuffle(a)  #打乱顺序
print('原始值:',a)
print("排序后的结果:",merge_sort(a))

6.快速排序

'''
步骤:
    从数列中挑出一个元素作为基准数。
    分区过程,将比基准数大的放到右边,小于或等于它的数都放到左边。
    再对左右区间递归执行第二步,直至各区间只有一个数。
'''
import random
def quickSort(arr):
    if len(arr)<2:
        return arr
    else:
        #找基值
        baseValue=arr[0]
        lessArray=[item for item in arr[1:] if item<baseValue]
        eqArray=[item for item in arr[:] if item==baseValue]
        bigArray=[item for item in arr[1:] if item>baseValue]
    return quickSort(lessArray)+eqArray+quickSort(bigArray)
    
a=list(range(6))
random.shuffle(a)  #打乱顺序
print('原始值:',a)
print("排序后的结果:",quickSort(a))

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值