一、选择,冒泡,插入都为O(n*n),都有双层for循环
选择:
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) { // i ~ N-1 上找最小值的下标
冒泡:
for (int i = arr.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (arr[j] > arr[j + 1]) {
插入:
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i; j >= 0; j--) {
if (arr[j] > arr[j + 1]) {
二、二分法
2.1存在:
while (L < R) {
2.2、>=value的最左位置:
while (L <= R)
if (arr[mid] >= value) {
index = mid;
2.3、<=value的最右位置:
while (L <= R)
if (arr[mid] <= value) {
index = mid;
2.4、局部最小
//上升,局部最小在左边。下降的局部最小在右边
if (arr[mid] > arr[mid - 1]) { right = mid - 1; } else if (arr[mid] > arr[mid + 1]) { left = mid + 1; } else { return mid; }