python快速排序
Posted 21座的胖子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
以上是关于python快速排序的主要内容,如果未能解决你的问题,请参考以下文章