package
sort.algorithm;
//折半插入排序
public
class
HalfInsertSort {
public
static
void
main(String[] args) {
int
data[] = {
2
,
6
,
10
,
3
,
9
,
80
,
1
,
16
,
27
,
20
};
// 存放临时要插入的元素数据
int
temp;
int
low, mid, high;
for
(
int
i =
1
; i < data.length; i++) {
temp = data[i];
// 在待插入排序的序号之前进行折半插入
low =
0
;
high = i -
1
;
while
(low <= high) {
mid = (low + high) /
2
;
if
(temp < data[mid])
high = mid -
1
;
else
// low=high的时候也就是找到了要插入的位置,
// 此时进入循环中,将low加1,则就是要插入的位置了
low = mid +
1
;
}
// 找到了要插入的位置,从该位置一直到插入数据的位置之间数据向后移动
for
(
int
j = i; j >= low +
1
; j--)
data[j] = data[j -
1
];
// low已经代表了要插入的位置了
data[low] = temp;
}
for
(
int
k =
0
; k < data.length; k++) {
System.out.print(data[k] +
" "
);
}
}
}
|