希尔排序理解和代码
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;
}
其看代码就可以看明白 文字解释反而显得啰嗦 ;
个人理解 如有错误 敬请指正!

浙公网安备 33010602011771号