希尔排序理解和代码

void Start()
{
    int[] arr = new int[] { 5, 4, 9, 8, 6, 3, 2, 1, 7, 5, 6, 9, 8 };
    int[] brr = shellSort(arr);

    for (int i = 0; i < brr.Length; i++)
    {
      print(brr[i]);
    }
}

 希尔排序类似于插入排序

第一步,它先把原数组分成前后两段下面叫A,B;

把A,B的相同下标的元素进行比较,如果符合排序条件就交换位置

第二步完成上一步操作以后 把A,B分别分成两段A1,A2,B1,B2 再执行第一步 详细看下面代码  

private int[] shellSort(int[] arr)
{
    for (var gap = Mathf.FloorToInt(arr.Length / 2); gap > 0; gap = Mathf.FloorToInt(gap / 2))
    {
        for (int i = gap; i < arr.Length; i++)
        {
            var j = i;
            var current = arr[i];
            while (j - gap >= 0 && current < arr[j - gap])
            {
                arr[i] = arr[j - gap];
                j = j - gap;
            }
            arr[j] = current;
        }
    }
    return arr;
}

其看代码就可以看明白  文字解释反而显得啰嗦 ;

个人理解 如有错误 敬请指正!

 

posted @ 2021-04-14 11:17  真的勇士  阅读(234)  评论(0)    收藏  举报