二分插入排序: 和插入排序类似,只不过通过对有序数组进行折半查找,以提高查找插入位置的效率。
public int[] sort(int[] a) { for (int i = 0; i < a.length; i++) { int left = 0; int mid = 0; int right = i -1; //对第i个元素进行插入时,则有序数组的长度为i,最后的元素下标为i-1; int temp = a[i]; while (left <= right) { //当left>right时代表位置查找结束。 if (a[i] < a[mid]) { right = mid - 1; mid = (left + right) / 2; } else if (a[i] > a[mid]) { left = mid + 1; mid = (left + right) / 2; } else { left = mid + 1; } } for (int j = i - 1; j > right; j--) { //查找到的位置到第i个数之前的数全部向后挪一位。以便插入 a[j+1] = a[j]; } a[right+1] = temp; //在查找到的位置处插入需要插入的元素值。 } return a; }