潍坊市论坛

首页 » 分类 » 问答 » 数据结构与算法模板总结一
TUhjnbcbe - 2021/2/6 3:19:00
数据结构与算法模板总结(一)一.排序快排思想

①确定分界点:q(l),q[(l+r)/2],q[r],随机取;

②调整区间:通过x划分为两段,第一个区间的值都小于等于x,第二个区间的值都大于等于x;

③递归处理左右两端,因为左边的最大值要小于右边的最小值;

调整区间的方法:

简单方法实现

step1:开两个空间:a[],b[];

step2:扫描q[l-r]:将小于x的值放入a,将大于x的值放入b;

step3;将a和b的值放入原数组中;

经典方法实现

step1:定义两个指针I,j,让i和j分别向中间走;

step2:i先往中间走,只要i指向的数x,那么i向后移动一位,直到i指向的数是大于等于x的,i就停下;移动j,同理,当遇到小于x的,j就停下;

step3:swap(I,j),i和j都往前移动一位。

实现模板

publicstaticvoidquickSort(intq[],intl,intr){if(l=r)return;intx=q[l],i=l-1,j=r+1;while(ij){do{i++;}while(qx);do{j--;}while(q[j]x);if(ij){inttemp=q;q=q[j];q[j]=temp;}}quickSort(q,l,j);quickSort(q,j+1,r);}

「注意:」

如果要改为从大到小,把qx改为qx,q[j]x改为q[j]x即可;当递归的界限取j时,分界点不能取最右边的r,会有界限问题。默写时最好按照l,j这样进行默写。

题目链接:

1