快速排序

快速排序

快速排序不同于归并排序的按元素在数组中的位置对数组进行划分,而是按照元素的值对其进行划分。具体来说,快速排序的思想主要是对数组中的元素进行重新排列,来得到一个快速排序的分区。在得到的分区中,所有s下标之前的元素都小于等于A[s],之后的元素都大于等于A[s]。

如何建立分区呢?首先我们应该选定一个中轴,在中轴左边的元素小于等于中轴元素,之后大于等于中轴元素。我们首先将第一个元素作为中轴,然后分别从数组的开头和结尾分别遍历数组。

  • 第一步从数组的第二个元素开始,如果遍历的过程中忽略小于中轴元素的值,如果找到一个大于中轴元素的值A[i],停止遍历;然后从数组的最后一个元素往前遍历数组,大于中轴元素的值忽略,如果找到一个小于中轴元素的值A[j],停止遍历

  • 第二步,比较i和j的值,如果i<j,交换i与j位置的元素,然后i ,j加一,继续遍历知道i>=j;如果i>=j,交换中轴元素与A[j]的值,得到一个划分。

python实现:

def partition(arr,low,high): 
	#分区函数
    i = ( low-1 ) 
    pivot = arr[high]     
    for j in range(low , high): 
        if   arr[j] <= pivot:          
            i = i+1 
            arr[i],arr[j] = arr[j],arr[i] 
  
    arr[i+1],arr[high] = arr[high],arr[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) 

公众号 :数学算法实验室
专注于算法与人工智能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值