python快速排序

快排的思路

快速排序的思路是拿一个值作为枢纽(通常用数组最后一个数),遍历数组,依次与枢纽进行比较,每次比较后把比枢纽小的数都放在枢纽前,比枢纽大的数放在枢纽后。利用递归分别对两边进行排序。快速排序是原地排序。设置枢纽为arr[high],两个指针初始化时一个指向数组第一个位置的下标-1,一个利用循环对数组进行遍历。

代码

def partition(arr,low,high): 
    i = low-1		##设置第一个指针指向数组第一个位置下标减一
    pivot = arr[high]     	##设置枢纽为high
    for j in range(low , high): 	##遍历数组
        if arr[j] <= pivot: 	##判断,比枢纽值小的放在数组枢纽前面,<= 改为 >= 可实现从大到小排序
            i = i+1 	##移动指针
            arr[i],arr[j] = arr[j],arr[i]		##交换ij的位置   
    arr[i+1],arr[high] = arr[high],arr[i+1] 	##交换枢纽到i+1的位置
    return i+1	##返回枢纽位置
    
def quickSort(arr,low,high): 
    if low < high: 		## 递归
        pi = partition(arr,low,high) 
        quickSort(arr, low, pi-1) 
        quickSort(arr, pi+1, high) 
  
arr = [7, 10, 8, 9, 1, 5]  	##测试
quickSort(arr,0,len(arr)-1) 
print(arr)

另外写了一个以数组第一个数作为枢纽:

def partition(arr,low,high): 
    i = low-1
    pivot = arr[low] 
    for j in range(low , high+1): 
        if arr[j] <= pivot: 
            i = i+1 
            arr[i],arr[j] = arr[j],arr[i]   
    arr.insert(i+1,pivot)
    del arr[low]
    return i
    
def quickSort(arr,low,high): 
    if low < high: 
        pi = partition(arr,low,high)
        quickSort(arr, low, pi-1) 
        quickSort(arr, pi+1, high) 
  
arr = [7, 10, 8, 9, 1, 5]  
quickSort(arr,0,len(arr)-1) 
print(arr)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值