现在的位置: 首页 > 综合 > 正文

Java排序算法(七):折半插入排序

2013年01月05日 ⁄ 综合 ⁄ 共 872字 ⁄ 字号 评论关闭

 Java排序算法(七):折半插入排序

折半插入排序法,又称二分插入排序法,是直接插入排序法的改良版,也需要执行i-1趟插入,不同之处在于,第i趟插入,先找出第i+1个元素应该插入的的位置,假定前i个数据是已经处于有序状态。

代码实现:

package sort;

public class BinaryInsertSortTest {
	public static int count = 0;

	public static void main(String[] args) {

		int[] data = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };
		print(data);
		binaryInsertSort(data);
		print(data);

	}

	public static void binaryInsertSort(int[] data) {
		for (int i = 1; i < data.length; i++) {
			if (data[i] < data[i - 1]) {
				// 缓存i处的元素值
				int tmp = data[i];
				// 记录搜索范围的左边界
				int low = 0;
				// 记录搜索范围的右边界
				int high = i - 1;
				while (low <= high) {
					// 记录中间位置
					int mid = (low + high) / 2;
					// 比较中间位置数据和i处数据大小,以缩小搜索范围
					if (data[mid] < tmp) {
						low = mid + 1;
					} else {
						high = mid - 1;
					}
				}
				//将low~i处数据整体向后移动1位
				for (int j = i; j > low; j--) {
					data[j] = data[j - 1];
				}
				data[low] = tmp;
				print(data);
			}
		}
	}

	public static void print(int[] data) {
		for (int i = 0; i < data.length; i++) {
			System.out.print(data[i] + "\t");
		}
		System.out.println();
	}

}

 

运行结果:

5	3	6	2	1	9	4	8	7	
3	5	6	2	1	9	4	8	7	
2	3	5	6	1	9	4	8	7	
1	2	3	5	6	9	4	8	7	
1	2	3	4	5	6	9	8	7	
1	2	3	4	5	6	8	9	7	
1	2	3	4	5	6	7	8	9	
1	2	3	4	5	6	7	8	9

抱歉!评论已关闭.