算法导论练习题
name大权子
我是一个菜逼加小白,请多指教!!!
展开
-
算法导论第二章-练习2.2-3
线性查找的时间复杂度最好和最坏这两种情况首先最好,有一个序列3,1,5,4,2,我需要找到第一个数3,一次就成功了,复杂度O(1)然后最坏,同样这个序列,我要找到第五个数2,我需要比较五次,复杂度O(n),n为元素总数所以,第几个数就需要找到第几次,最好情况第一个数就是要找到的,最坏的情况最后一个数是要找到的所有有 n个数最坏情况: 1+2+3+…+n-1+n次 ,即前N项和 ...原创 2019-07-01 14:42:50 · 276 阅读 · 0 评论 -
算法导论第二章-练习2.3-2
用数组下表限制数组越界原题是用一个无穷大值做哨兵,另一中方法,用函数下表限制数组越界即可,用一个if判断来写直接上代码 讲可能讲不太清楚#include<stdio.h>void Mergesort(int number[],int p,int r);void Merge(int number[],int p,int q,int r);int main(void) {...原创 2019-07-01 22:39:24 · 175 阅读 · 0 评论 -
算法导论第二章-练习2.3-4
用递归来写插入排序对于分治法,我不是很懂,但是经过这次用递归来解决插入排序让我大致了解这类算法的思想。通过不断分解问题的大小,直至最小。我觉得这类算法比较适合有规律的问题,就比如插入算法,每一次的操作的是相同的,插入也是一个一个的来插入,那么这就是典型的分治法策略了。贴上代码:#include<stdio.h>void charusort(int number[],int ...原创 2019-07-04 22:29:03 · 243 阅读 · 0 评论 -
算法导论第二章-练习2.1-2
重写插入排序,按照升序排序按照原有的插入排序算法,只需要改变交换值的判断条件即可:此处贴上代码仅供参考:#include<stdio.h>int main(void) { int number[10]={11,51,31,21,61,41,71,91,81,101}; int key,j; for(int i=1;i<10;i++) { key=number[i...原创 2019-06-29 21:20:46 · 209 阅读 · 0 评论 -
算法导论第二章-练习2.1-3
线性查找线性查找是一种非常简单也非常容易理解的一种查找方式,就是遍历所有的元素,找到相同的元素贴上函数代码仅供参考#include<stdio.h>int Line(int number[],int n,int v);int main(void) { int number[10]={11,51,31,21,61,41,71,91,81,101},v=21; int ...原创 2019-06-29 22:54:52 · 177 阅读 · 0 评论 -
算法导论第二章-练习2.1-4
二进制相加问题题干书上有,此处省略!!分析:首先考虑一位二进制相加的情况:有0+0、0+1、1+1三种情况注意到,1+1时等于二,对于二进制来说就产生了进位,即进位为1,此处为零所以在设计算法时要有一个变量储存进位值总的加减用循环,进位值用if条件语句判断此处贴上代码仅供参考:#include<stdio.h>void Line(int number1[],int...原创 2019-06-30 12:44:17 · 237 阅读 · 0 评论 -
算法导论第二章-练习2.2-2
选择算法(选择排序咯)其实这道题就是将选择排序的,要是会选择排序就简单多了。不会,没关系,请看下面:这有个数组,里面有N个元素,如3,5,4,1,2第一次循环,找个最小的元素找到第四个值为1,将第四个与第一个换一下,1,5,4,3,2开始第二个循环,从第二个开始,第一个最小啦,不比较了后四个比较,第五个最小,将第五个与第二个换一下序列为:1,2,4,3,5在进行两次循环后,剩下...原创 2019-06-30 22:33:28 · 264 阅读 · 1 评论