Conversation
There was a problem hiding this comment.
我先暂时审核一半吧,因为我觉得问题还挺严重的,不如先把问题都说出来然后改一遍:
-
我们是在做一个科普性质的项目,那么所有你想传达给读者的东西都要解释清楚,不要给读者思考,更不要反问读者。如果有些东西和你负责的 topic 无关(比如链表),那可以一带而过,但是于你负责的 topic 相关的所有内容都需要解释清楚;
-
格式有很大的问题,写完之后不说 docsify 环境吧,至少要用一个 markdown 的环境在本地过一遍在提交上来。中英文标点、markdown 的代码环境、latex 公式环境、空格等等这些都要注意;
-
算法讲解的部分过于简单。你可以用图来辅助你的讲解,但不能只写一两句话然后全交给图。我觉得至少对于每个算法,你要举一个数组作为例子并带着读者过一遍算法中的一步(比如选择排序的外层循环、快速排序的一次 partition 等)。这篇文章现在给我的感觉就是「萌新看不懂,学过的人看一遍不会掌握新的知识」,特别是后面快速排序、堆排序的部分,一定要把概念讲清楚,然后举例子,不要只写 high-level 的那些东西;
-
有不少的错误,特别是时空复杂度分析的部分,希望只是笔误。
其它的看 weiwei 哥怎么说吧,我现在就先提上面四点要求
|
|
||
| 你会不会感觉这很简单啊?为什么要有那么多的排序算法呢?因为如果你要对一百万,一千万或者更多的元素排序,不同的排序算法的时间复杂度和空间复杂度都是不同的,我们要根据数据的特点,选择不同的排序算法。 | ||
|
|
||
| 接下来,我们把所有经典的排序算法都讲解一遍,相信你看完这篇文章在面试或者做题的过程中一定不再惧怕排序算法相关的题目,即使做不出来,也会有思路的。而且我会讲解对应的LeetCode经典例题,让你明白排序算法在 LeetCode 中的应用。最后,文章的最后分享一道LeetCode题目,可以让你测试所有的排序算法,这样就保证了排序算法的正确性。 |
| 接下来,我们把所有经典的排序算法都讲解一遍,相信你看完这篇文章在面试或者做题的过程中一定不再惧怕排序算法相关的题目,即使做不出来,也会有思路的。而且我会讲解对应的LeetCode经典例题,让你明白排序算法在 LeetCode 中的应用。最后,文章的最后分享一道LeetCode题目,可以让你测试所有的排序算法,这样就保证了排序算法的正确性。 | ||
|
|
||
| 备注: | ||
| 1、接下来所有的算法都是按照**从小到大**进行排序的(从大到小是同理)。 |
There was a problem hiding this comment.
- 中英文标点符号不要混用;
- Markdown 语法是有自己的列表环境,1.[空格] [正文] [回车] 2.[空格] [正文] 等等这样;
- 变量要使用 Markdown 的 `` 环境,例如
n; - 我们这个项目用别人的图还是自己做,这点要商量一下;
- 第 4 条没什么用吧,后面会有人补其它语言代码的
| ## 1.冒泡排序 | ||
|
|
||
| 如果让我说一个最容易理解的排序算法,我会认为是冒泡排序. | ||
| 怎么简单呢?就是一个元素会看看后面的元素是不是比自己小,如果是那就交换位置,让小的在前面,如果你是小的,那么就不用交换位置了.而这个过程最多重复n次就好了,因为即使最大的元素在最前面,经过n次交换,也会达到它应该到的地方. |
There was a problem hiding this comment.
「这个过程」指的是什么过程?从你上面的叙述,读者会觉得「过程」是「交换两个元素」,但实际上重复 n 次的过程是「从头到尾」扫描数组「判断」并「交换两个元素」
| void bubblesort(vector<int>&nums) | ||
| { | ||
| int n = nums.size(); | ||
| for(int i = 0;i < n - 1;i++) { |
There was a problem hiding this comment.
代码规范,例如 for (int i = 0; i < n - 1; i++),该加空格的地方要加上
|
|
||
| ```cpp | ||
| void bubblesort(vector<int>&nums) | ||
| { |
| } | ||
| ``` | ||
|
|
||
| 计数排序的时间复杂度和空间复杂度都是O(n),是用时间换空间的典型。不过他的应用具有一定的局限性,比如只有三个数:1,5000,10000,要开辟长度为10000的数组,就得不偿失了。 |
There was a problem hiding this comment.
计数排序的空间复杂度是 O(C),其中 C 是给定数据的范围,和 n 没关系
| int index = 0; | ||
| for(int num = minnum;num <= maxnum;num++) { | ||
| int cnt = tem[num - minnum]; | ||
| while(cnt-- > 0) { |
|
|
||
| 快速排序使用分治法来把一个串分为两个子串。具体算法描述如下: | ||
|
|
||
| - 从数列中挑出一个元素,称为 “基准”; |
|
|
||
| - 找出待排序的数组中最大和最小的元素,开辟这么多的空间; | ||
| - 遍历每个元素,看其应该分配到那个位置上。 | ||
| - 反向填充目标数组。 |
| } | ||
| ``` | ||
|
|
||
| 快速排序的平均时间复杂度是O(nlogn),空间复杂度是O(nlogn) |
Sort部分第一版,请前辈review