常用算法代码模板及代码技巧

参考《AcWing算法基础课》、《AcWing算法提高课》与《学而思培优小猴编程》等课程的思路,并结合日常刷题实践,我将常用的算法模板进行了系统整理。

现分享如下,既为方便自己查阅,也希望能为大家的学习提供一份参考。


基础算法

快速排序

模板

// do-while版本
void quick_sort(int q[], int l, int r)
{if (l>=r) return;int rnd_idx = rand() % (r-l+1)+l;swap(q[l], q[rnd_idx]);int x=q[l], 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_sort(q, l, j);quick_sort(q, j+1, r);
}// while版本
void quick_sort(int q[], int l, int r)
{if (l>=r) return;int rnd_idx = rand() % (r-l+1)+l;swap(q[l], q[rnd_idx]);int x=q[l], i=l-1, j=r+1;while (i<j) {while (q[++i]<x);while (q[--j]>x);if (i<j) swap(q[i], q[j]);}quick_sort(q, l, j);quick_sort(q, j+1, r);
}

练习

题解:AcWing 785 快速排序