复习数组相关
1、函数调用原理
2、指针就是地址的别名,指针类型变量 字节数:4字节(32位操作系统)/8字节(64位操作系统)
冒泡排序
n个数字会交换n-1趟,
第1趟比较n-1次;
第2趟比较n-2次;
第3趟比较n-3次;
...
第j趟比较n-j次。
选择排序
从第一个位置开始,假设为最小值,然后在后续的数列中找到最小值和当前假设的最小值进行位置交换,然后依次往后排序
插入排序:
把数列看为是一个有序数列和一个无须数列的组合,将后面无序数列的每一项插入到前面有序的数列中
算法效率
时间复杂度:语句总的执行次数,一定是关于问题规模的函数
记法:O( f (n) ) f(n)——>关于问题规模的函数,越小越好
常见的时间复杂度:O(1)< O(log n)< O(n)< O(n^2)、
O(log n)实例:
提问:冒泡排序的最优时间复杂度是?
答:O(n),在数列趋于有序的情况下,只遍历一趟的时候就排序成功,这个时候的时间复杂度就是O(n)
提问:遍历查找数据时候时间复杂度?
答:O(n),这里是要求的是平均的时间复杂度,3,2,1,4,6这个数列中要找到4的位置,4有可能在第一个位置,那遍历一次就找到,如果4在最后一个位置,那就得遍历整个一维数组,因此:可能遍历的次数是(1次+2次+3次+......+n次)/ n,那就是(1+n)*n/2,最后再除以n,就求得平均时间复杂度
提问:二分查找时间复杂度?
答:O(log N),每次都是折半查找,那就是n/2/2/2/2/.....,除以2的次数不确定,所以是log N
时间复杂度的推导方式:
1、常数项化简为O(1)
2、函数次数:只保留跟问题规模 n 相关的最高项,去除与最高项相乘的常数
总结:访问数据的各个数据次数的累加和——>问题规模
空间复杂度:额外开辟的内存空间(问题规模相关)
没有额外开辟跟问题规模相关的内存,那开辟的内存还是O(1)