常见排序算法详解

快速排序算法
from typing import List
def Partion(data:List[int],start:[int],end:[int]):
part=data[start]
while start<end:
while data[end] >= part and start < end:
end -= 1
data[end], data[start] = data[start], data[end]
while data[start]<=part and start < end:
start+=1
data[start],data[end]=data[end],data[start]
print(‘sort’,data)
return start

def quicksort(data:List[int],start:[int],end:[int]):
if start<end:
middle=Partion(data,start,end)
quicksort(data,start,middle-1)
quicksort(data,middle+1,end)

if name==“main”:
data=[5,3,7,6,4,1,0,2,9,10,8]
quicksort(data,0,10)
print(‘data’,data)

每一轮排序之后的结果:
sort [2, 3, 0, 1, 4, 5, 6, 7, 9, 10, 8]
sort [1, 0, 2, 3, 4, 5, 6, 7, 9, 10, 8]
sort [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 8]
sort [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 8]
sort [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 8]
sort [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 8]
sort [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
data [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

插入排序
def inserttionSort(arr):
arr_length=len(arr)
for i in range(1,arr_length):
key=arr[i]
j=i-1
while j>=0 and key<arr[j]:
arr[j+1]=arr[j]
j-=1
arr[j+1]=key
return arr

if name==“main”:
a=[3,5,1,2,7,6]
res=inserttionSort(a)
print(‘res’,res)

选择排序
def selectsort(arr):
for i in range(len(arr)-1):
min=i
for j in range(i+1,len(arr)):
if arr[j]<a[min]:
min=j
if min!=i:
arr[i],a[min]=a[min],arr[i]
return arr

if name==“main”:
a=[4,6,1,3,5,6]
res=selectsort(a)

冒泡排序

def bubble_sort(arr):
for i in range(len(arr)-1): #外层是比较次数
flag=False
for j in range(len(arr)-1-i): #内层是交换次数
if arr[j]>arr[j+1]:
a[j],arr[j+1]=arr[j+1],arr[j]
flag=True
print(‘arr’,arr)
if not flag:
break
return arr
#加入flag的目的就是为了保证是否交换完全,要是内层已经完成了,不再交换了,那么本次循环就排序可以结束了。

排序稳定性:
稳定的排序:直接插入排序、冒泡排序、归并排序
不稳定的排序:希尔排序、直接选择排序、堆排序、快速排序

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值