千里之行,始于足下||每天一道算法题||DAY1

编程好比盖高楼,根基没打好早晚有 一天会挎掉的,而且盖得越高,损失也越惨重。

这些底层知识和课本不是没有用也不是高深的不能学,而是我们必须掌握的基础。

大家好,我是茶微凉,一个普通211学校的本科生。以后想从事互联网相关的职业,报了培训班学习java,又感觉最近人工智能、机器学习特别火,所以看了一些相关的书。但是看了之后发现自己并不能深刻理解其中的逻辑,其实世界还是公平的,如果说只看那些书就能立马掌握真谛的话,那么这个行业也就没什么前景了。所以觉得还是应该把基础学号,于是开始这个“每天一道算法题”的活动。自己慢慢来吧,每天花一个小时学学算法和别的基础知识。


算法 想必只要是学过计算机的同学都知道大概是个什么东西。

算法导论中说,算法就是任何良定义的计算过程,该过程取某个值或值的集合作为输入并产生某个值或值的集合作为输出。这样算法就是把输入转换成输出的计算步骤的一个序列。

我们也可以把算法看成是用于求解良说明的计算问题的工具。一般来说,问题陈述说明了期望的输入/输出关系。算法则描述一个特定的计算过程来实现该输入/输出关系。


接触的第一个也是用的最多的算法种类,应该就是排序算法了吧:

今天就从第一个排序问题开始吧!

输入:n个数的一个序列

输出:输入序列的一个排列< a1',a2',……,an '>,满足 a1'≤a2 '≤ …… ≤ an'

首先想到一个场景:打扑克,正常的习惯就是要把牌按顺序放好,而我们每次摸到一张牌就会和手中牌比较然后插进去,这就是一个排序过程。具体来说,更类似于插入排序。

千里之行,始于足下||每天一道算法题||DAY1_第1张图片
使用插入排序来排序手中的扑克

插入排序算法的一般步骤:

1.从第一个元素开始,该元素可以认为已被排序;

2.取出下一个元素,在已经排序的元素序列中从后向前扫描;

3.如果该元素(2中依次获得的已排序元素)大于新元素,则将该元素下移一个位置;

4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置(或者到达头部);

5.将新元素插入到该位置后,重复2~5

千里之行,始于足下||每天一道算法题||DAY1_第2张图片
模拟插入排序过程

插入排序算法的C++表示:

void InsertionSort(int *a, int len){

    for (int j=1; j=0 && a[i]>key) {

        a[i+1] = a[i];

        i--;

    }

    a[i+1] = key;

    }

}

其实我也没用过C++,哈哈哈,只是想顺便借此机会多了解一门语言,光看这一段代码似乎和java也差不多,毕竟两都是面向对象编程的。

熟悉C++的同学应该知道这只是一个方法,也就是函数。要想运行还得需要main函数,在这里就把完整代码截图下来咯:

千里之行,始于足下||每天一道算法题||DAY1_第3张图片
完整代码

再附上运算结果:

千里之行,始于足下||每天一道算法题||DAY1_第4张图片
运算结果



明天的算法题是下面这个哦:

输入:n个数的一个序列A=和一个值v。

输出:下标i,使得v=A[i];或者当v不在A中出现时,v为特殊值NIL。


[DAY2]

2017/12/17

你可能感兴趣的:(千里之行,始于足下||每天一道算法题||DAY1)