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快速排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法 | 快速排序(含C++/Python代码实现)

[leetcode]排序算法(冒泡排序,选择排序,插入排序,快速排序,计数排序)

python实现快速排序归并排序

python实现快速排序归并排序

python实现快速排序归并排序

python实现快速排序归并排序