【排序算法】二分插入排序(折半排序)白话讲解

二分插入排序(折半排序)

  对于插入排序,如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的次数,我们称为二分插入排序

算法描述:

  在直接插入排序的基础上,利用二分(折半)查找算法决策出当前元素所要插入的位置。

二分查找:

  1.找到中间元素,如果中间元素比当前元素大,则当前元素要插入到中间元素的左侧;

  2.否则,中间元素比当前元素小,则当前元素要插入到中间元素的右侧。

  3.找到当前元素的插入位置 i 之后,把 i 和 high 之间的元素从后往前依次后移一个位置,然后再把当前元素放入位置 i。

代码

private static void insertSort2(int[] a) {
	for(int i=0;i<a.length-1;i++){
		int temp = a[i+1];
		int low = 0;
		int high = i;
		int mid;
		while(low<=high) {
			mid = (low+high)/2;
			if (a[mid]>temp) {
				high = mid-1;
			}else{
				low = mid+1;
			}
		}
		for(int j=i;j>=high+1;j--){
			a[j+1]=a[j];
		}
		a[high+1]=temp;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章