文章目录
1.查找算法
1.二分/折半查找
- 时间复杂度:O(logn)
- 空间复杂度
public static int binarySearch(int[] array, int value) {
int low = 0;
int high = array.length - 1;
while (low <= high) {
int middle = (low + high) >> 1;
if (value == array[middle]) {
return middle;
}
if (value > array[middle]) {
low = middle + 1;
}
if (value < array[middle]) {
high = middle - 1;
}
}
return -1;
}
2.排序算法
1.冒泡排序(Bubble Sort)-----不推荐
原理:从前往后或者从后往前一个一个比较,每次会确定一个未排序中的最大值(最小值)的最终位置
算法分析
- 平均复杂度 O(n2)
- 最差复杂度 O(n2)
public int[] bubbleSort(int[] n) {
//趟数
for (int i = 0; i < n.length - 1; i++) {
//0~i已经有序,从后往前排,后面小的则和前面的交换
for (int j = n.length - 1; j > i; j--) {
if (n[j] < n[j - 1]) {
int temp = n[j - 1];
n[j - 1] = n[j];
n[j] = temp;
}
}
}
return n;
}
2.选择排序(Selection Sort)----不推荐
原理:每次会确定一个未排序中的最大值(最小值)的最终位置,若从低到高排序,每次选择未排序中最小的和第一个元素交换,直至遍历完列表,再进行下一次选择。
算法分析
- 平均复杂度 O(n2)
- 最差复杂度 O(n2)
public static int[] selectionSort(int[] array) {
if (array.length == 0)
return array;
for (int i = 0; i < array.length; i++) {
int minIndex = i;
for (int j = i; j < array.length; j++) {
if (array[j] < array[minIndex]) //找到最小的数
minIndex = j; //将最小数的索引保存
}
int temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;
}
return array;
}