菜鸟笔记
提升您的技术认知

算法笔记 第14页

C++插入排序

性能分析:   时间复杂度:O(n^2)   空间复杂度:O(1) 但是综合来讲,要比冒泡排序和选择排序好一些。     #include<iostream> #include<vector> u...

赞(1)菜鸟菜鸟阅读(3212)

结构体对齐(字节对齐)规则及大小计算

什么是字节对齐 这跟读取数据有关,cpu读取一次能读取到的内存大小跟数据总线的位数有关,如果数据总线为16位,那么cpu一次能够读取2字节;如果为32位那么cpu一次可以读取4字节,而读取数据是需要消耗时间的,为了提高效率,尽量让同一个数据...

赞(1)菜鸟菜鸟阅读(4790)

递归之求数组最大值

这个比较简单,想清楚基线条件和递归条件就可以了,直接看代码(VS直接运行): #include #include using namespace std; int arrayMax(int data[], int length); int ...

赞(1)菜鸟菜鸟阅读(2054)

递归之快速排序

递归快速排序的步骤: (1)选择基准值 (2)将数组分成两个子数组:小于基准值的元素组成的子数组和大于基准值的元素组成的子数组。 (3)对这两个子数组进行快速排序。 C++代码(可在VS直接运行): #include<iostream...

赞(1)菜鸟菜鸟阅读(2884)

递归之二分查找

简单查找的时间复杂度为O(n) 二分查找的时间复杂度为O(logn) 用递归实现二分查找:   基线条件:数组只包含一个元素。如果如果要查找的值与这个元素相同,就找到了;否则说明不在数组中。   递归条件:把数组分成两半,将其中一半丢弃,并...

赞(1)菜鸟菜鸟阅读(4888)

链表的题型和解题思路

1.链表中环的入口节点 首先判断头指针是不是空的然后需要判断这个链表中包不包含环:两个指针,一个一步一个两部,如果相遇,说明存在然后判断环节点的个数:从相遇的位置开始,往前走并计数,直到和自己再次相遇,得到个数然后找出入口节点:从头开始,俩...

赞(1)菜鸟菜鸟阅读(2114)

算法的时间复杂度和空间复杂度

一、常用的算法的时间复杂度和空间复杂度 二、算法的时间复杂度和空间复杂度合称为算法的复杂度。 1.时间复杂度 (1)时间频度  一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每...

赞(1)菜鸟菜鸟阅读(2455)

几种常见的位运算

1、判断奇偶数 如果把一个数n以二进制数的形式表示的话,我们只需要判断最后一个二进制位是1还是0即可。如果是1,则代表奇数,否则为偶数。代码如下: if(n & 1 == 1){ // n是奇数 } 2、交换两个数 x = x ^ ...

赞(1)菜鸟菜鸟阅读(2974)

浅谈递归算法

1 引言 程序调用自身的编程技巧称为递归( recursion)。递归作为一种算法在程序设计语言中广泛应用。一个方法或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来...

赞(1)菜鸟菜鸟阅读(2978)

浅谈动态规划

动态规划算法(Dynamic Programming,简称 DP)似乎是一种很高深莫测的算法,你会在一些面试或算法书籍的高级技巧部分看到相关内容,什么状态转移方程,重叠子问题,最优子结构等高大上的词汇也可能让你望而却步。 而且,当你去看用动...

赞(1)菜鸟菜鸟阅读(2104)