前言

快排模板是现在必须掌握的一个排序方法。现在的公司面试越来越要求手写代码。所以学会常见的代码的模板还是很有必要的。

快速排序主要的思想主要是通过多次比较和交换来实现排序:

(1)首先设定一个分界值(建议取中间值:​​l+r>>1​​),通过该分界值将数组分成左右两部分

2022下半年 Acwing 第一篇:快排模板_数据

(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。这种情况下,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值

2022下半年 Acwing 第一篇:快排模板_数据_02

(3)接下来开始递归,对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理

(4)重复上述过程,当左、右两个部分各数据排序完成后,整个数组的排序就完成了

模板内容:
C++ 模板

void quick(int q[],int l,int r){
if(l>=r) return;
int x = q[(l+r+1)>>1],i = l-1,j = r+1;
while(i<j){
do i++;while(q[i]<x);
do j--;while(q[j]>x);
if(i<j) swap(q[i],q[j]);
}
quick(q,l,i-1);
quick(q,i,r);
}

python模板

def quick_sort(l,r,data):
if l >= r:
return
i = l - 1
j = r + 1
x = data[(i+j) // 2]
while i < j:
while 1:
i += 1
if data[i] >= x:
break
while 1:
j -= 1
if data[j] <= x:
break
if i < j:
data[i],data[j] = data[j],data[i]
quick_sort(l,j,data)
quick_sort(j+1,r,data)


def main():
l = 0
r = n-1
quick_sort(l,r,data)

if __name__ == "__main__":
n = int(input())
data = [int(x) for x in input().split()]
main()
print(' '.join(list(map(str, data))))

C++ 中的 ​​do...while​​​ 可以使用 python中的死循环替换修改:
C++ 格式:

do i++;while(q[i]<x);

python格式

while 1:
i += 1
if data[i] >= x:
break