#! /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)}')
python3.7从零开始学之快速排序法
最新推荐文章于 2023-09-17 18:10:04 发布