一,知识概括:
1.递归思想
2.分治思想
3.const
二,代码示例:
#include <iostream> using namespace std; const int N = 100010; int q[N]; 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); } int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i ++ ) scanf("%d", &q[i]); quick_sort(q, 0, n - 1); for (int i = 0; i < n; i ++ ) printf("%d ", q[i]); return 0; } 作者:yxc 链接:https://www.acwing.com/activity/content/code/content/39784/ 来源:AcWing
三,理解思路:
快速排序是运用了递归思想,
递归是将一个问题分解为几个子问题,并通过运用同一条件推算又分解为更多的子问题,直至得到答案,一节一节返回数据出来。
要运用,就先要满足递归的两个条件:
一,可以通过递归调用用一个判断不断缩小范围或者是不断推算可以得出结果。
二,可以退出递归调用。
而使用递归则要思考三个方面:
一,题目要你做什么?
二,接受条件是什么?
三,递归条件是什么?
临时模板:
void quick_sort()
{
if(结束条件){}
quick_sort();//可放在函数外面和里面,可多可少。
return;
}
更详细的这里也有。
递归算法_周闖的博客-CSDN博客_规递算法To iterate is human, to recurse, divine.人理解迭代,神理解递归。什么是递归递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。简单地说,就是如果在函数中存在着调用函数本身的情况,这种现象...https://blog.csdn.net/Andrew_ZhouC/article/details/104621075?ops_request_misc=&request_id=&biz_id=102&utm_term=%E9%80%92%E5%BD%92%E7%AE%97%E6%B3%95&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-104621075.142%5Ev24%5Ehuaweicloudv2,157%5Ev15%5Enew_3&spm=1018.2226.3001.4187
分治思想:
分治是y神在课上讲的,是指把问题分成若干个小部分,用相同的条件判断达到目的,在我看来这个和递归有点像,但是递归是注重递和归,是问题里面的问题,而分治是分。在分一次不能解决问题时,分治也经常搭配递归使用以达到多次分。
使用分治的条件:
数据可以分开用同一条件判断且判断条件简单。
使用分治的步骤:
一,分
二,判断
(三,合并)
临时模板:
void merge_sort()
{
int mid = (l + r) / 2; //l是左边,r是右边。
merge_sort(l, mid);
merge_sort(mid + 1, r);
//处理条件。
return;//可配合递归处理。
}
现在理解不透的详细资料:
四,语法详解:
一,const
const是类型修饰符,定义const类型的变量以后只读不改,并且可以把它看作为字符表的一员,比其他的要节约空间。(但要注意它只在文件内有用)
const int N = 100010;
如果要在其他文件使用,则要加上extern。
结语:
这个题目是十分基础的,问题不大。主要要记住思想,并吃透。
这是鄙人没有什么学识,如有错误,请尽情留言。