最近学习了一下排序算法,写篇文章记录一下,详细讲解网上有很多,可以自己去查
折半插入排序Binary Insert Sort
折半插入排序是在插入排序的基础上,通过二分查找法找到插入位置,以此来减少比较次数,提高排序效率。折半插入排序的时间复杂度是O(n²),是稳定排序。
1 2 3 4 5 6
[ 18 22 25 30 37] 28
↑ ↑ ↑
low high
[ 18 22 25 30 37] 28
↑ ↑ ↑
low high
[ 18 22 25 30 37] 28
↑ ↑ ↑
high low
[ 18 22 25 28 30 37]
↑
算法描述(Java):
import java.util.Arrays;
public class SortAlgorithm {
public static void binaryInsertSort(int[] array) {
int temp = 0;
for (int i = 1; i < array.length; ++i) {
temp = array[i];
int low = 0;
int high = i - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (temp >= array[mid]) {
low = mid + 1;
} else {
high = mid - 1;
}
}
for (int j = i - 1; j >= low; --j) {
array[j + 1] = array[j];
}
array[low] = temp;
}
}
public static void main(String[] args) {
int[] array = {18,8,22,37,5,25,11,8,30};
binaryInsertSort(array);
System.out.println(Arrays.toString(array));
}
}