时间复杂度
O = Big O
去除掉常数项、去除掉低价项、剩下最高阶项表示事件复杂度
选择排序算法 O(n*n)
排序算法
https://www.runoob.com/w3cnote/ten-sorting-algorithm.html
选择和冒泡排序
选择排序: 找到最小值和第一个交换; 没有稳定性
Sort.java
冒泡排序: 能保持稳定性
异或 = 无进位相加
EOR.java
1、特性
- A^0 = A
- A^A = 0
2、得出结论
- 交换律 顺序无关
- 结合律
同样内存位置 异或 会洗成0;
找出 数组中奇数次 的数
定义一个 eor 和数组所有的数 异或;
找出 数组中两种树是奇数次的数
定义一个 eor 和数组所有的数 异或;
找到 eor 中某一位上是 1 的表示 a 和 b 这两种数某一位上有一个是0 另一个是1;
定义 eor1 以后某一位上0 的数,最后得到 a 或者 b, 然后和 eor 异或得到另一个;
插入排序
Sort.java
0-1 向前看排序
0-2 向前看
0-n
有稳定性;
二分排序
找局部最小值
递归 归并排序
归并: 分割 partition 然后 merge 可以做到稳定性
master 公式求解时间复杂度
a、b、d 三个参数确定 就可以确定时间复杂度;
快速排序
做不到稳定性,
partition 的
堆排序
使用二叉树来进行排序
排序算法的稳定性,
同样值的个体之间,如果不因为排序而改变相对次序,就表示这个排序是稳定的,否则就不是
不具备稳定性的排序:
选择排序,快速排序,堆排序
稳定性排序:
冒泡排序,插入排序,归并排序,一切桶排序;