C# 二进制插入排序是如何工作的?

C# 二进制插入排序是如何工作的?,c#,sorting,search,C#,Sorting,Search,我知道二进制搜索是如何工作的,也知道插入排序是如何工作的,但这段代码是关于二进制插入排序的,我在理解它是如何工作的方面有问题 static void Main(string[] args) { int[] b = BinarySort(new[] { 4, 3, 7, 1, 9, 6, 2 }); foreach (var i in b) Console.WriteLine(i); } public static int[] BinarySort(int[] li

我知道二进制搜索是如何工作的,也知道插入排序是如何工作的,但这段代码是关于二进制插入排序的,我在理解它是如何工作的方面有问题

static void Main(string[] args)
{
    int[] b = BinarySort(new[] { 4, 3, 7, 1, 9, 6, 2 });
    foreach (var i in b)
        Console.WriteLine(i);
}
public static int[] BinarySort(int[] list)
{
    for (int i = 1; i < list.Length; i++)
    {
        int low = 0;
        int high = i - 1;
        int temp = list[i];
        //Find
        while (low <= high)
        {
            int mid = (low + high) / 2;
            if (temp < list[mid])
                high = mid - 1;
            else
                low = mid + 1;
        }
        //backward shift
        for (int j = i - 1; j >= low; j--)
            list[j + 1] = list[j];
        list[low] = temp;
    }
    return list;
}
在这里使用二进制搜索的目的是什么? 你能告诉我二进制插入排序是如何工作的吗?(c#控制台)


代码源:

二进制插入排序与插入排序相同,但它将插入点的定位与实际插入分开

为数组实现的插入排序将在定位插入点的同时移动项。在遍历项目以找到插入点的同时,它还将移动项目以为插入腾出空间

二进制插入排序将利用已排序的项目已排序的事实,因此它可以使用二进制搜索来查找插入点。由于二进制搜索也不能移动项目来为插入腾出空间,因此必须在找到插入点后在单独的步骤中完成


您想要解释的代码是移动项目以为插入腾出空间的代码。

有什么让人困惑的?你用调试器检查过了吗?@gunr217是的,但我不知道这段代码将如何对数据进行排序,以及二进制搜索的目的是什么?我在编辑中添加的源代码中没有关于它的信息。
//backward shift
for (int j = i - 1; j >= low; j--)
    list[j + 1] = list[j];
list[low] = temp;