折半插入排序和直接插入算法的唯一区别就是在向有序数组中比较的次数的减少,而移动的次数相同。
package com.larry.sorting;
import java.util.Arrays;
/**
* 折半插入排序
* @author admin
*
*/
public class BinaryInsertionSort {
/**
* 跳出条件是:low > high
* @param s 输入数组
* @return 输出数组
*/
private int[] binaryInsertionSort(int s[]){
int sLen = s.length;
if(sLen == 0 || sLen == 1) return s;
//折半插入排序核心算法
for(int i = 1; i < sLen; i++){
int low = 0, high = i-1;
int mid = 0;
while(low <= high){
mid = (low+high)/2;
if(s[i] < s[mid]) high = mid -1;
else low = mid + 1;
}
int sym = s[i];
//mid处(包括mid)的元素开始后移
for(int j = i-1; j >= mid; j--)
s[j+1] = s[j];
s[mid] = sym;
}
return s;
}
public static void main(String[] args) {
int array[] = {};
//int array[] = {1};
//int array[] = {1, 2, 3, 7, 5, 5, 11};
System.out.println(Arrays.toString(new BinaryInsertionSort().
binaryInsertionSort(array)));
}
}