上传文件至 'algorithm'

master
msb_110050 3 years ago
parent 885b2f19ce
commit aefb5bd67f

@ -0,0 +1,34 @@
一个数的相反数为取反加1.
取反的结果和原来的数相加结果为2^32^-1,再加1则进位为0。
2^32^-1二进制为
```shell
11111111 11111111 11111111 11111111
```
```shell
# 例如 int a = 1024;二进制为
00000000 00000000 00001000 00000000
# 取反后
11111111 11111111 11110111 11111111
# 相加为
11111111 11111111 11111111 11111111
a+~a+1=0;则-a=~a+1;
```
```Java
# 打印int类型二进制字符串方法
private static void printCompleteBinaryStr(int num){
for (int i = 31; i >= 0; i--) {
System.out.print((num & (1 << i)) == 0 ? "0" : "1");
if (i < 31 && (i + 1) % 8 == 0) {
System.out.print(" ");
}
}
System.out.println();
}
```
Integer.MIN_VALUE取反加一后仍然为Integer.MIN_VALUE这不是bug。
Integer.MAX_VALUE加1后溢出为Integer.MIN_VALUEInteger.MIN_VALUE减一则溢出为Integer.MAX_VALUE。

@ -0,0 +1,94 @@
# 算法的5个特点
1.有穷性
2.确定性(确定的执行流程或者确定的尝试流程)
3.可行性
4.输入
5.输出
# 选择排序
双层循环内层循环完成后获取最小值内层循环每次将最小值放到i位置。
0-i之间认为是有序i-n之间是原始数据从i-n之间选择最小的元素放到index为i的地方。
注意数组的交换,小于号避免相同元素交换位置。
```Java
private static void selectionSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
int length = arr.length;
int tmp;
for (int i = 0; i < length; i++) {
int index = i;
for (int j = i; j < length; j++) {
// 小于号避免位置交换
index = arr[j] < arr[index] ? j : index;
}
if (index == i) {
continue;
}
tmp = arr[i];
arr[i] = arr[index];
arr[index] = tmp;
}
}
```
# 冒泡排序
双层循环,内层循环两两交换,内层循环完成后将最大值冒泡到最右边。
外层循环index从大到小内层循环index从小到大。
```Java
private static void bubbleSort(int[] arr){
int length = arr.length;
if (arr == null || length < 2) {
return;
}
int tmp;
for (int i = length - 1; i >= 0; i--) {
for (int j = 0; j < i; j++) {
if (arr[j + 1] < arr[j]) {
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
```
# 插入排序
每次获取原始数据最前面的那个元素交换到左侧已经有序的数组。
双层循环外层循环每次递增并获取i内层循环使用i挨个和0-1的数据比较并交换。如果i比i-1大或者内层循环到了最左侧则终止循环。
```Java
private static void insertSort(int[] arr){
int length = arr.length;
if (arr == null || length < 2) {
return;
}
int tmp;
for (int i = 0; i < length; i++) {
for (int j = i; j > 0; j--) {
if (arr[j - 1] > arr[j]) {
tmp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = tmp;
} else {
break;
}
}
}
}
```
## 排序算法的稳定性问题???
在涉及到元素交换的时候,判断不使用等于,则相同的元素不会被交换。
Loading…
Cancel
Save