折半插入排序
import java.util.*;
public class BInsertSort{
private static void sort(int[] dataArr){
for(int i = 1; i < dataArr.length; i++){
int temp = dataArr[i];
int low = 0, high = i - 1;
while(low <= high){
int mid = (low + high) / 2;
if(temp < dataArr[mid]){
high = mid - 1;
}else{
low = mid + 1;
}
}
int j = i - 1;
for(; j >= high + 1; j--){
dataArr[j + 1] = dataArr[j];
}
dataArr[j + 1] = temp;
}
}
public static void main(String[] args){
int[] dataArr = new int[args.length];
for(int i = 0; i < args.length; i++){
try{
dataArr[i] = Integer.valueOf(args[i]);
}catch(NumberFormatException e){
System.out.println("input invalid decimal integer:" + e.getMessage());
return;
}
}
System.out.println("befort sort:" + Arrays.toString(dataArr));
sort(dataArr);
System.out.println("after sort:" + Arrays.toString(dataArr));
}
}
运行:
javac BInsertSort.java
java BInsertSort 49 38 65 97 76 13 27
输出:
befort sort:[49, 38, 65, 97, 76, 13, 27]
after sort:[13, 27, 38, 49, 65, 76, 97]