请用Java代码示例教我插入排序以及插入排序的优化
时间: 2023-11-20 10:57:00 浏览: 75
以下是Java代码示例,包括插入排序和插入排序的优化:
1. 插入排序
```java
public static void insertionSort(int[] arr) {
int n = arr.length;
for (int i = 1; i < n; ++i) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
```
2. 插入排序的优化
```java
public static void insertionSort(int[] arr) {
int n = arr.length;
for (int i = 1; i < n; ++i) {
int key = arr[i];
int j = i - 1;
// 使用二分查找找到插入位置
int pos = binarySearch(arr, 0, j, key);
// 将插入位置之后的元素全部后移一位
System.arraycopy(arr, pos, arr, pos + 1, i - pos);
// 将元素插入到正确的位置
arr[pos] = key;
}
}
private static int binarySearch(int[] arr, int left, int right, int target) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return left;
}
```
阅读全文