时间复杂度和一些排序
常数操作、和数据量有关的操作;
1.选择排序:
一趟以后,选出最小的值放在0位置;
……
时间复杂度:N^2
额外空间复杂度:1
时间复杂度
评价一个算法流程的好坏,先看时间复杂度的指标,然后在分析不同数据样本下的实际运行时间,也就是“常数项时间”。
额外空间复杂度:
2.冒泡排序:
每一趟冒出最大的数到最后
这里的交换函数,用了位运算;
3.位运算之异或:
这里听了太多次了,记得这句话就行了:在这里插入代码片
int rightOne=odd&(~odd+1);//提取odd位中最右边的1
a^a=0;
a^0=a;
4.插入排序:
i趟排序之后,前i个元素是有序的;
5.二分法:
1.在一个有序数组中,查找某个数是否存在
2.在一个有顺序数组中,找>=某个数最左侧的位置
3.局部最小值问题:相邻的数中中间是最小的
1.就是折半查找:
log N
2.二分查找不小于a的位置并记录,最后最左得的数就是所求。
3.先判断0位置和n-1位置是否为局部最小;如有就返回;没有的话,局部最小值一定存在在1~n-2之间,直接取中间位置m,判断m位置是否为局部最小值,若不是,左侧或者右侧一定有局部最小值;
4.对数器:
设计出了自己的算法,就可以用对数器的方法来测试(比如暴力解法和自带的方法)
生成随机的数组:
长度随机,值也随机。
这些随机数组来测试自己的算法是否可行