public class T {
public static void main(String args[]) {
int[] tempData = new int[] { 1, 2, 5, 7, 8, 9, 13, 6 };
new T().TwoInsertSort(tempData);
}
public void TwoInsertSort(int[] tempData) {
int left, right, num;
int middle, j;
for (int i = 1; i < tempData.length; i++) {
// 准备
left = 0;
right = i - 1;
num = tempData[i];
// num = 6;
// 二分法查找插入位置
while (right >= left) {
// 指向已排序好的中间位置
middle = (left + right) / 2;
if (num < tempData[middle])
// 插入的元素在右区间
right = middle - 1;
else {
// 插入的元素在左区间
left = middle + 1;
}
}
// 后移排序码大于R[i]的记录
for (j = i - 1; j >= left; j--) {
tempData[j + 1] = tempData[j];
}
// 插入
tempData[left] = num;
}
for (int i = 0; i < tempData.length; i++) {
System.out.println(tempData[i]);
}
}
}
温馨提示:答案为网友推荐,仅供参考