python快速排序 -两种方法

使用python实现快速排序

快速排序,⼜称划分交换排序

1.通过⼀趟排序将要排序的数据分割成独⽴的两部分,
其中⼀部分的所有数据都⽐另外⼀部分的所有数据都要⼩
2.然后再按此⽅法对这两部分数据分别进⾏快速排序,整个排序过程可以递归进⾏,以此达到整个数据变成有序序列。

步骤为:

从数列中挑出⼀个元素,称为"基准"(pivot)
重新排序数列,所有元素⽐基准值⼩的摆放在基准前⾯,所有元素⽐基准值⼤的摆在基准的后⾯(相同的数可以到任⼀边)。
在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
递归地(recursive)把⼩于基准值元素的⼦数列和⼤于基准值元素的⼦
数列排序。
递归的最底部情形,是数列的⼤⼩是零或⼀,也就是永远都已经被排序好了。虽然⼀直递归下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它⾄少会把⼀个元素摆到它最后的位置去。

方法一


# 完成一轮排序过程
def sub_sort(list_,low,high):
  # 基准数
  x = list_[low]
  while low < high:
    # 后面的数小于x放到前面的空位
    while list_[high] >= x and high > low:

        high -= 1
    list_[low] = list_[high] # 将数往前甩
    while list_[low] < x and low < high:
        low += 1
    list_[high] = list_[low]
  list_[low] = x # 将基准数插入
  return low


# 快排 low 第一个数序列号 high 最后一个数序列号
def quick(list_,low,high):
  if low < high:
    key = sub_sort(list_,low,high)
    quick(list_,low,key - 1)
    quick(list_, key+1, high)

#快速排序 方法一
quicker = [7,12,29,31,6,3]
quick(quicker,0,5)
print(quicker)

方法二

def quickSort(data,start,end):
    i = start
    j =end
    if i>=j:
        return
    flag =data[start]

    while i<j:
        while i<j and data[j]>=flag:
            j-=1
            temp=data[j]
        data[i] =data[j]
        while i<j and data[i]<=flag:
            i+=1
        data[j]=data[i]
    data[i]=flag
    quickSort(data,start,i-1)
    quickSort(data,i+1,end)

#方法二的快速排序
data = [45,3,2,6,78,5,33,22,65,46]
quickSort(data,0,len(data)-1)
print(data)

其实两种方法的快速排序是一样的,快速排序的程序挺不好理解的。不常用总忘,笔试面试还考。
这里引用其他人的程序,我有加了我的方法。以此铭记

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值