二分法插入排序学习记录
最坏的情况下二分插入排序的时间复杂度依然是O(n^2),
如果待排序的序列已经有序,排序时间复杂度为O(nlogn)。
由此可见,二分插入排序的算法已经对插入排序做了一定的优化!
package demo01;
/**
* 二分插入排序
* @author Guozhu Zhu
* @date 2018/4/11
* @version 1.0
*
*/
public class Test01 {
public static void main(String[] args) {
int arr[] = {9, 8, 7, 2, 1};
binInsertSort(arr);
for (int i : arr) {
System.out.println(i);
}
}
public static void binInsertSort(int arr[]) {
for (int i = 1; i < arr.length; i++) {
int temp = arr[i];
int low = 0;
int high = i-1;
int mid;
while (low <= high) {
mid = (low+high)/2;
if (arr[mid] > temp) {
high = mid-1;
} else {
low = mid+1;
}
}
for (int j = i-1; j >= low; j--) {
arr[j+1] = arr[j];
}
arr[low] = temp;
}
}
}