二分法查找
package algorithm;
/**
* @Description: 二分查找
* @author: zpli
* @Date: 2020/6/1 9:30
*/
public class BinarySearch {
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 3, 5, 7, 8, 9};
int digest = 4;
System.out.println(binarySearch(arr, digest));
}
public static int binarySearch(int[] arr, int digest) {
int low = 0, high = arr.length - 1;
while (low <= high && digest >= arr[low] && digest <= arr[high]) {
if (digest == arr[low])
return low;
if (digest == arr[high])
return high;
int mid = low + (high - low) / 2;
if (arr[mid] == digest) {
return mid;
} else if (arr[mid] < digest) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
}
冒泡排序
package algorithm;
import java.util.Arrays;
/**
* @Description: 冒泡排序,时间复杂度为N的平方
* @author: zpli
* @Date: 2020/6/1 10:44
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = new int[]{4, 2, 3, 5, 7, 1, 4, 6};
System.out.println("冒泡排序前:"+ Arrays.toString(arr));
bubbleSort(arr);
System.out.println("冒泡排序后:"+ Arrays.toString(arr));
}
public static void bubbleSort(int[] arr) {
for (int i = 0, len = arr.length; i < len - 1; i++) {
boolean swap = false;
for (int j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swap = true;
}
}
if (!swap) return;
}
}
}
快速排序
package algorithm;
import java.util.Arrays;
/**
* @Description: 快速排序,以轴为区分,轴左边的都比轴小,轴右边的都比轴大
* @author: zpli
* @Date: 2020/6/1 16:19
*/
public class QuickSort {
public static void main(String[] args) {
int[] arr = {49, 5, 2, 38, 65, 97, 23, 49, 22, 76, 1, 5, 8, 2, 0, -1, 49, 22};
// int[] arr = {49, 2, 38, 65, 97, 23, 22, 76, 1, 5, 8, 0, -1};
System.out.println("快速排序前:" + Arrays.toString(arr));
quickSort(arr, 0, arr.length - 1);
System.out.println("快速排序后:" + Arrays.toString(arr));
}
public static void quickSort(int[] arr, int left, int right) {
if (left < right) {
int L = left, R = right, pivot = arr[L];
while (L < R) {
while (L < R && arr[R] >= pivot) {
R--;
}
if (L < R) {
arr[L++] = arr[R];
}
while (L < R && arr[L] <= pivot) {
L++;
}
if (L < R) {
arr[R--] = arr[L];
}
}
arr[L] = pivot;
quickSort(arr, left, L - 1);
quickSort(arr, L + 1, right);
}
}
}
插入排序
package org.zpli.java8.sort;
import java.util.Arrays;
/**
* @Description: 插入排序
* @author: zpli
* @Date: 2020/5/27 9:26
*/
public class InsertSort {
public static void main(String[] args) {
int[] arr = new int[]{3, 2, 9, 5, 6, 1, 7, 0};
System.out.println(Arrays.toString(arr));
insertSort(arr);
System.out.println(Arrays.toString(arr));
StringBuilder sb = new StringBuilder();
}
private static void insertSort(int[] arr) {
for (int i = 1, len = arr.length; i < len; i++) {
int temp = arr[i];
int j;
for (j = i; j > 0 && arr[j - 1] > temp; j--) {
arr[j] = arr[j - 1];
}
arr[j] = temp;
}
}
}
选择排序
package algorithm;
import java.util.Arrays;
/**
* @Description: 选择排序,时间复杂度为N的平方,不稳定
* @author: zpli
* @Date: 2020/6/1 10:54
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr = new int[]{4, 2, 3, 5, 7, 1, 4, 6};
System.out.println("选择排序前:" + Arrays.toString(arr));
selectSort(arr);
System.out.println("选择排序后:" + Arrays.toString(arr));
}
private static void selectSort(int[] arr) {
for (int i = 0, len = arr.length; i < len - 1; i++) {
int min_idx = i;
for (int j = i + 1; j < len; j++) {
if (arr[j] < arr[min_idx]) {
min_idx = j;
}
}
if (i != min_idx) {
int temp = arr[i];
arr[i] = arr[min_idx];
arr[min_idx] = temp;
}
}
}
}