最后
由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
3.最后使用递归的方法处理左右两端,然后排好序之后两个部分合在一起就是这整个数组的排序。
以上是整体的一个大概思想。
我们可以利用这个思想写一个最容易想到的方法:同时开辟两个新的数组内存(取名a数组,b数组),然后取一个数X,然后让他们依次和X进行对比,如果数大于X就存倒b数组中如果小于X存入a数组中,如果相等存入任意一个数组即可(任意一个指a数组或b数组)。然后再用递归的方法排序,然后将两个数组拼接在一起即可。
然而我们还有一种更好的方法不需要开辟多余的内存而且时间的复杂度也不变,下面我将详细的讲述一下这个方法:
首先,先声明两个指针,这两个指针分别从数组的两端向中间靠拢,,具体就是两个指针一个指向第一个元素,第二个指针指向数组的最后一个元素,然后让两个指针分别向中间靠拢,每指向一个数就让它和选取的X进行大小比较如果比X大应该放在右边就先,然后停下来不动,等右端的指针指向了一个比X小的数需要放到X的左边,这时将两个指针所指向的数进行交换,交换结束后让指针指向交换位置的下一个位置,遇到相等的数可以不交换,两个指针相遇停下即可。读者请仔细研读上述内容,理解最好。**
void quick\_sort(int q[], int l, int r)
{
if (l >= r) return;
int i = l - 1, j = r + 1, x = q[l + 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);
}
以上是快速排序的代码模板可以帮助理解
最后
四轮技术面+一轮hr面结束,学习到了不少,面试也是一个学习检测自己的过程,面试前大概复习了 一周的时间,把以前的代码看了一下,字节跳动比较注重算法,面试前刷了下leetcode和剑指offer, 也刷了些在牛客网上的面经。大概就说这些了,写代码去了~
祝大家都能收获大厂offer~
篇幅有限,仅展示部分内容
dnimg.cn/img_convert/f5c18f4b2878302f1f53a8c393e7eb0d.png)