算法
nkuhjp
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
浅谈快速排序
今天早上花了大约两个小时时间研究了下快排的思想(请别嘲笑我可怜的智商),终于把其中的奥妙搞得比较清楚了。为了防止忘掉,特地写这篇文章来加深印象。总的来说,快排是运用了分治和递归的思想:先找一个基准点,然后把数组中比这个基准大的数放到一边,把比它小的数放到另一边。比如找基准9,那么把比9小的数放在9的左边,把比9大的数放在9的右边。然后调用递归使9左边和9右边的数字们也同样的分别排序,最后一定可以从原创 2016-05-26 15:12:11 · 378 阅读 · 0 评论 -
浅谈归并排序
昨晚睡前看了下刘汝佳紫书上关于归并排序的介绍,很想自己实现一遍,于是趁着今天下午复习马基的时间自己手动敲了一遍代码。由于之前有快排的经验,所以这次理解起归并排序并不十分困难。 先上自己写的代码:void merge_sort(int num[], int left, int right, int temp[]){ if (left == right) return;原创 2016-06-10 15:36:06 · 561 阅读 · 0 评论 -
大数相加与相乘
//先说相加#include<iostream>#include<cstring>using namespace std;int main(){ char num1[200]; char num2[200]; //用以存放反转后的字符串 char num3[200]; char num4[200]; //用以存放结果,到时候从后往前输出即可原创 2016-06-06 00:14:52 · 458 阅读 · 0 评论 -
浅谈插入排序
插排其实挺简单的,理解起来比快排、归并排序容易多了,但是插排挺慢的,时间复杂度是O(n^2)。 它的思路就是从第i项起,假设前面的已经全部排好,这时候第i项一直往前移动,直到找到适合它的位置,然后插进去。移动期间需要不断的把前一位的值赋给当前位置,这样就可以避免到时候找到适合自己位置后还要重新走一遍原来的路,把各个数移位,节省了时间。当然如果你一定要先找到位置再来移位也是可以的。而且如果你要从第0原创 2016-06-21 15:13:56 · 393 阅读 · 0 评论 -
利用递归输出全排列
当我们有一个所有元素都互不相同的数组,且准备把里面的元素进行全排列时,我们会怎么做?举个例子,现在我们有一个含有1,2,3三个元素的数组,现在我们准备找出它们的全排列。大部人的做法是先在第一个位置放1,第二个位置放2,第三个地方放3;然后还是第一个位置放1,交换2和3的位置;之后换成2放在第一个,对1和3进行之前相似的做法。那么当我们有很多数时,思路也是类似的,就是先固定前面的数的排序,然后依次原创 2016-09-12 21:47:13 · 1768 阅读 · 0 评论 -
使用递归求出一个集合的所有子集
想一下,平时如果给你1,2,3,4四个数,让你写出它的所有子集,你会怎么做? 我想大部分人的思路是先写出子集中只含有一个元素的子集:1;2;3;4。然后考虑子集中含有两个元素的子集:1,2;1,3;1,4;2,3;2,4;3,4。然后是子集中含有三个元素的子集:1,2,3;1,2,4;1,3,4;2,3,4。最后是自己:1,2,3,4。当然别忘了还有一个空集。 好的,如果能够这么想说明思路还是挺原创 2016-09-21 21:05:46 · 16937 阅读 · 2 评论
分享