定义一个数据包装类:
package sorted;
public class DataWrap implements Comparable{
int data;
String flag;
public DataWrap(int data,String flag){
this.data=data;
this.flag=flag;
}
public String toString(){
return data+"_"+flag;
}
public int compareTo(DataWrap dw){
return this.data>dw.data ? 1:(this.data==dw.data? 0 : -1);
}
}
折半插入排序算法如下:
package sorted;
import java.util.Arrays;
public class BinaryInsertSort {
public static void binaryInsertSort(DataWrap[] data){
System.out.println("开始排序:\n");
int arrayLength=data.length;
for(int i=1;i
DataWrap tmp = data[i];
int low =0;
int high=i-1;
while(low<=high){
int mid=(low+high)/2;
if(tmp.compareTo(data[mid])>0){
low=mid+1;
}else{
high=mid-1;
}
}
for(int j=i;j>low;j--){
data[j]=data[j-1];
}
data[low]=tmp;
System.out.println(Arrays.toString(data));
}
}
public static void main(String args[]){
DataWrap[] data={
new DataWrap(9,""),
new DataWrap(-16,""),
new DataWrap(21,"*"),
new DataWrap(23,""),
new DataWrap(-30,""),
new DataWrap(-49,""),
new DataWrap(21,""),
new DataWrap(30,"*"),
new DataWrap(30,"")
};
System.out.println("排序之前:\n"+Arrays.toString(data));
binaryInsertSort(data);
System.out.println("排序之后:\n"+Arrays.toString(data));
}
}
运行结果: