python脚本中的四种排序实例(插入、选择、冒泡、计数)

插入排序:当前左边但凡有数据并且该数据比当前大,则交换

arr=[2,4,8,6,5,1,9,7,3]
for i in range(1,len(arr)):
    for j in range(i,0,-1):
        if arr[i]<arr[i-1]:
            arr[i],arr[i-1]=arr[i-1],arr[i]
            j-=1 
        if arr[j]<arr[j-1]:
            arr[j],arr[j-1]=arr[j-1],arr[j]   
print(arr)
arr=[2,4,8,6,5,1,9,7,3]
for i in range(1,len(arr)):
    e=arr[i]
    for j in range(i,-1,-1):
        if arr[j-1]>e and j-1>=0:
            arr[j]=arr[j-1]
        else:
            arr[j]=e
            break
print(arr)

计数排序:
不是通过数字之间的大小进行排序,而是数字本身的特性排序
1.找出最大值和最小值
2.根据max-min+1创建一个新的列表
3.计算偏移量
4.遍历原列表,在新列表中计数
5.遍历新列表,读取数字(index+offset)和次数

arr=[4,3,2,1,5,7,6,9,8]
min_num=arr[0]
max_num=arr[0]
for num in arr:
    if num>max_num:
        max_num=num
    if num<max_num:
        min_num=num
length=max_num-min_num+1
offset=min_num
lst=[0]*length
for num in arr:
    lst[num-offset]+=1
"""
    i+offseet  #数字
    lst[i]     #该数字出现的次数
"""
for i in range(0,len(lst)):
    for j in range(0,lst(i)):
        print(i+offset,end=" ")


import random
arr=[0]*1000000
for i in range(0,len(arr)):
    arr[i]=random.randint(0,10000)
# min_num=min(arr)
# max_num=max(arr)
arr2=arr.copy()
min_num=arr[0]
max_num=arr[0]
for num in arr:
    if num>max_num:
        max_num=num
    if num<min_num:
        min_num=num
length=max_num-min_num+1
offset=min_num
lst=[0]*length
for num in arr:
    lst[num-offset]+=1
"""
    i+offseet  #数字
    lst[i]     #该数字出现的次数
"""
index=0
for i in range(0,len(lst)):
    for j in range(0,lst[i]):
        #print(i+offset,end=" ")
        arr[index]=i+offset
        index+=1
print("arr排序完毕")
arr2.sort()
print("arr2排序完毕")

冒泡排序:核心思想:
元素之间两两比较,大的向后走

arr=[1,5,8,3,2,9,6,7,4]
for i in range(0,len(arr)-1):
   for j in range(0,len(arr)-1-i):
       if arr[j]>arr[j+1]:
           arr[j],arr[j+1]=arr[j+1],arr[j]
print(arr)

选择排序:默认从小到大排序,当前元素与之后所有元素都要进行比较,如果前者大于后者,则交换

import random
arr=[None]*2000
for i in range(0,len(arr)):
    arr[i]=random.randint(0,10000)
arr2=arr.copy()
arr2.sort()
print("arr2排序完毕!")
for i in range(0,len(arr)-1):
    for j in range(i+1,len(arr)):
        if arr[i]>arr[j]:
            arr[i],arr[j]=arr[j],arr[i] 
print("arr排序完毕!")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值