二分查找:
private int BinarySearch(int[] arr,int low,int high,int target)
{
if (arr.Length < 1 || low > high) return -1;
int mid = (low + high) / 2;
if (arr[mid] == target) return mid;
if (arr[mid] > target)
return BinarySearch(arr, low, mid - 1, target);
else
return BinarySearch(arr, mid + 1, high, target);
}
二分查找插入排序算法:
private void InsertSortWithBinarySearch(int[] arr)
{
if (arr.Length < 1) return;
int j = 0;
for (int i = 1; i < arr.Length; i++)
{
int index = BinarySearchForInsertSort(arr, 0, i, i);
int temp = arr[i];
for (j = i-1; j>=index; j--)
{
arr[j + 1] = arr[j];
}
arr[index] = temp;
}
}
private int BinarySearchForInsertSort(int[] arr,int low,int high,int key)
{
if (low > arr.Length - 1) return arr.Length - 1;
if (high < 1) return 0;
int mid = (low + high) / 2;
if (arr[mid] == arr[key]) return mid;
if (arr[mid] > arr[key])
{
if (mid - 1 < 0) return 0;
if (arr[mid - 1] < arr[key]) return mid;
return BinarySearchForInsertSort(arr, low, mid - 1, key);
}
else
{
if (arr[mid + 1] > arr[key]) return mid + 1;
return BinarySearchForInsertSort(arr, mid + 1, high, key);
}
}