您的位置:首页 > 编程语言 > Java开发

排序算法之二分插入排序Java版

2015-07-01 21:13 337 查看
/**
* 二分插入排序是直接插入排序的改进版
* 二分插入排序是不稳定排序
*
* 原理:
* 将一个记录插入到已排序好的有序序列中,从而得到一个新,记录数增1的有序序列。
* 二分插入排序用二分法找出新记录在有序序列中的位置。
*/
public class BinaryInsertionSort {
public void sort(int[] arr) {
int i, j, left, right, center, tmp, len = arr.length;

for (i = 1; i < len; i++) {

//如果新记录小于有序序列的最大元素,则用二分法找出新纪录在有序序列中的位置
if (arr[i] < arr[i - 1]) {
left = 0;
right = i - 1;
while (left < right) {
//获取中间位置索引,把有序序列分成两个子序列
center = (right + left) / 2;

if (arr[center] < arr[i]) {
//如果新纪录大于中间位置记录,则在右边序列继续进行二分
left = center + 1;
} else {
//如果新纪录小于中间位置记录,则在左边序列继续进行二分
right = center - 1;
}
}

tmp = arr[i];

//把比arr[i]大的记录往后移
for (j = i; j > left; j--) {
arr[j] = arr[j - 1];
}

arr[left] = tmp;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: