其实二分插入排序就是用了二分原理提高效率!不断的插入数据并给数据排序!
public
class
BinarySort {
public
static
void
binarySort(
int
[] source) {
int
i, j;
int
high, low, mid;
int
temp;
for
(i =
1
; i < source.length; i++) {
// 查找区上界
low =
0
;
// 查找区下界
high = i -
1
;
//将当前待插入记录保存在临时变量中
temp = source[i];
while
(low <= high) {
// 找出中间值
// mid = (low + high) / 2;
mid = (low + high) >>
1
;
//如果待插入记录比中间记录小
if
(temp<source[mid] ) {
// 插入点在低半区
high = mid -
1
;
}
else
{
// 插入点在高半区
low = mid +
1
;
}
}
//将前面所有大于当前待插入记录的记录后移
for
(j = i -
1
; j >=low; j--) {
source[j +
1
] = source[j];
}
//将待插入记录回填到正确位置.
source[low] = temp;
System.out.print(
"第"
+ i +
"趟排序:"
);
printArray(source);
}
}
private
static
void
printArray(
int
[] source) {
for
(
int
i =
0
; i < source.length; i++) {
System.out.print(
"\t"
+ source[i]);
}
System.out.println();
}
public
static
void
main(String[] args) {
int
source[] =
new
int
[] {
12
,
15
,
9
,
14
,
4
,
18
,
23
,
6
};
System.out.print(
"初始关键字:"
);
printArray(source);
System.out.println(
""
);
binarySort(source);
System.out.print(
"\n\n排序后结果:"
);
printArray(source);
}
}
二分插入排序通过从第二个数开始将需要排序的数分为两个部分,左边部分有序,右边部分无序,然后从右边部分第一个数开始,一个一个插入前面有序部分,与直接插入排序唯一不同的是:二分插入排序会先找出左边有序部分的中间值,然后与需要插入的值比较,所以在插入之前,就只需要与左边有序部分的一半值进行比较。因此,在数据量比较大的时候,二分插入排序算法就更加高效,速度更快。