好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#希尔排序算法

前言

希尔排序简单的来说就是一种改进的插入排序算法,它通过将待排序的元素分成若干个子序列,然后对每个子序列进行插入排序,最终逐步缩小子序列的间隔,直到整个序列变得有序。希尔排序的主要思想是通过插入排序的优势,减小逆序对的距离,从而提高排序效率。

希尔排序实现原理

首先要确定一个增量序列(初始间隔),将待排序序列分成多个子序列。 对每个子序列分别进行插入排序,即在子序列内部进行排序。 逐步减小增量,重复步骤2,直到增量为1,即完成最后一次插入排序,排序完成。

希尔排序动态图解

希尔排序代码实现

 ????????  public? static? void? ShellSort(  int[]?array)
????????{
???????????? int?arrLength?=?array.Length;

???????????? //?初始化增量(初始间隔)为数组长度的一半
???????????? int?gap?=?arrLength?/? 2;

???????????? //?不断缩小增量,直到增量为1
???????????? while?(gap?>? 0)
????????????{
???????????????? //?对每个子序列进行插入排序
???????????????? for?( int?i?=?gap;?i?<?arrLength;?i++)
????????????????{
???????????????????? int?temp?=?array[i];
???????????????????? int?j?=?i;

???????????????????? //?在子序列内部进行插入排序
???????????????????? while?(j?>=?gap?&&?array[j?-?gap]?>?temp)
????????????????????{
????????????????????????array[j]?=?array[j?-?gap];
????????????????????????j?-=?gap;
????????????????????}

????????????????????array[j]?=?temp;
????????????????}

???????????????? //?缩小增量
????????????????gap?/=? 2;
????????????}
????????}

???????? public? static? void? ShellSortRun( )
????????{
???????????? 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测试数据/developer/article/1502452

查看更多关于C#希尔排序算法的详细内容...

  阅读:41次