python3.7从零开始学之快速排序法

#! /usr/bin/python3
# -*- coding:UTF-8 -*-
#快速排序法
def quick_sort(num_list):                #4.主函数调用,
    q_sort(num_list,0,len(num_list)-1)   #5.调用q_sort()函数,实参  n_list列表,首项序列,最后元素序列传入

def q_sort(num_list,first,last):         #6.传入实参给形参
    if first < last:                     #7.条件判断,
        split = partition(num_list,first,last)#8.调用函数partition(),传入n_list,首项序列,末项序列实参
        q_sort(num_list,first,split - 1) #递推,判断划分元素
        q_sort(num_list,split + 1,last)  #递推

def partition(num_list,first,last):      #9.传入实参给形参
        pivot = num_list[first]          #10.选取列表中的第一个元素作为划分元素
        left_mark = first + 1            #11.左坐标向右移动一格
        right_mark = last                #右坐标为末项序列
        while True:
            while num_list[left_mark] <=pivot:#当左坐标元素小于等于划分元素时,左坐标自增1(从左到右序列+1)}|若列表中|
                if left_mark == right_mark:   #如果左坐标等于右坐标时退出当前while循环
                    break
                left_mark +=1
            while num_list[right_mark] > pivot:#当右坐标元素大于划分元素时,右坐标自减1,(从右到左序列-1)
                right_mark -= 1
            if left_mark < right_mark:         #如果左坐标所在元素大于划分元素,右坐标元素小于划分元素,交换两个坐标所指的元素
                num_list[left_mark],num_list[right_mark] = num_list[right_mark],num_list[left_mark]
            else:
                break                     #左坐标超过了右坐标,退出当前循环
        num_list[first],num_list[right_mark] = num_list[right_mark], num_list[first] #交换first处的划分元素和右坐标处的元素
        return right_mark

n_list = [1,5,567,9,1,7] #1.生成列表
print(f'before:{n_list}')#2.打印当前序列
quick_sort(n_list)#3.调用quick_sort()函数,传入n_list实参
print(f'After:{n_list}')
print(f'use function sorted:{sorted(n_list)}')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值