折半插入排序(算法思想在注释中)
/**
* className:Sort
*
* @author:zjl
* @version:0.1
* @date:2020/8/615:17
* @since:jdk1.8
*/
public class Sort {
//测试
public static void main(String[] args) {
int R[] = {1,5,9,6,2,3,8,4,7};
int[] ints = binarySort(R);
for (int i = 0; i < ints.length; i++) {
System.out.print(ints[i]+" ");
}
}
//折半插入排序
public static int[] binarySort(int R[]){
for (int i = 1; i < R.length; i++) {
int temp = R[i];//暂存待插入元素
//获取要插入的位置前一个元素的索引indexPre
int indexPre = biSearchGetIndex(R, i - 1, temp);
for (int j=i-1;j>indexPre;j--) {
R[j+1]=R[j]; //元素后移
}
R[indexPre+1] = temp; //插入
}
return R;
}
/**
*折半查找思想寻找插入位置的前一个元素的索引indexPre
* @param R 待排序列
* @param last 待排序列中已经排好顺序的子序列的最后一个元素的索引
* @param num 待插入元素
* @return
*/
public static int biSearchGetIndex(int R[],int last,int num ){
int i,j;
i = 0;
j = last;
while (j>=i){
int temp = (i+j)/2;
if(R[temp]>num){
j=temp-1;
}else {
i=temp+1;
}
}
return j;
}
}
测试结果