二分法插入排序算法原理及JAVA实现

基本思想:插入排序的基本操作是在一个有序表中进行查找插入,用折半查找实现查找步骤。

复杂度
:时间复杂度 O(n2) 空间复杂度O(1)

JAVA源代码(成功运行)

package testSortAlgorithm;

public class BinaryInsertionSort {
	public static void main(String[] args) {
		// 0下标数据用来作为哨兵
		int[] array = { 0, 49, 38, 65, 97, 76, 13, 27 };
		binaryInsertSort(array);
		for (int i = 1; i < array.length; i++) {
			System.out.print(array[i] + " ");
		}
	}

	public static void binaryInsertSort(int[] array) {
		int low, high, mid;
		for (int i = 2; i < array.length; i++) {
//			哨兵位
			array[0] = array[i];
//			要将第i位插入前i-1有序序列
			low = 1;
			high = i - 1;
//			折半查找
			while (low <= high) {
				mid = (low + high) / 2;
				System.out.println("low " + low + " high " +high + " mid " + mid);
				if (array[0] < array[mid]) {
					high = mid - 1;
				} else {
					low = mid + 1;
				}
			}
//			要插入high+1位置,需要把high+1——i-1位置上的数据依次后移一位
			for (int j = i - 1; j >= high + 1; j--) {
				array[j + 1] = array[j];
			}
			array[high + 1] = array[0];
		}
	}
}

折半查找算法(前提是数据已经排好序)

package testSortAlgorithm;

public class BinarySearch {
	public static void main(String[] args) {
		int a[] = {1,3,6,8,9,10,12,18,20,34};
		int i = 12;
		System.out.println(binarySearch(a,i));
	}
	public static int binarySearch(int[]a ,int num){
		if (a.length == 0) {
			return -1;
		}
		int startPosition = 0;
		int endPosition = a.length - 1;
		int midPosition = (startPosition + endPosition)/2;
		while (startPosition <= endPosition) {
			if (a[midPosition] == num) {
				return midPosition;
			}
			if (a[midPosition] > num ) {
				endPosition = midPosition - 1;
			}
			if (a[midPosition] < num ) {
				startPosition = midPosition + 1 ;
			}
			midPosition = (startPosition + endPosition)/2;
		}
		return -1;
	}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值