前言
希尔排序简单的来说就是一种改进的插入排序算法,它通过将待排序的元素分成若干个子序列,然后对每个子序列进行插入排序,最终逐步缩小子序列的间隔,直到整个序列变得有序。希尔排序的主要思想是通过插入排序的优势,减小逆序对的距离,从而提高排序效率。
希尔排序实现原理
首先要确定一个增量序列(初始间隔),将待排序序列分成多个子序列。
对每个子序列分别进行插入排序,即在子序列内部进行排序。
逐步减小增量,重复步骤2,直到增量为1,即完成最后一次插入排序,排序完成。
{
intarrLength = array.Length;
// 初始化增量(初始间隔)为数组长度的一半
intgap = arrLength / 2;
// 不断缩小增量,直到增量为1
while(gap > 0)
{
// 对每个子序列进行插入排序
for(inti = gap; i < arrLength; i++)
{
inttemp = array[i];
intj = i;
// 在子序列内部进行插入排序
while(j >= gap && array[j - gap] > temp)
{
array[j] = array[j - gap];
j -= gap;
}
array[j] = temp;
}
// 缩小增量
gap /= 2;
}
}
publicstaticvoidShellSortRun()
{
int[] array = { 19, 20, 22, 32, 34, 50, 99, 49, 1, 11, 11, 55, 35, 93, 96, 71, 70, 38, 78, 48};
Console.WriteLine("排序前数组:"+ string.Join(", ", array));
ShellSort(array);
Console.WriteLine("排序后数组:"+ string.Join(", ", array));
}
运行结果
参考文章
排序算法图解:https://cloud.tencent.com/developer/article/1502452
学习是一个永无止境的过程,你知道的越多,你不知道的也会越多,在有限的时间内坚持每天多学一点,你一定能成为你想要成为的那个人。不积跬步无以至千里,不积小流无以成江河!!!返回搜狐,查看更多
See you next good day责任编辑: