版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Luyanc/article/details/82078494
希尔排序(Shell's Sort)是插入排序的一种,又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
C#代码如下:
using System;
namespace 希尔排序
{
//从小到大排序
public class ShellSorting
{
public void ShellSort(int[] nums)
{
int i, j, temp;
//定义每一趟排序的次数:
int sortnum = 0;
//定义增量:
int gap = nums.Length / 2;
while (gap > 0)
{
for (i = gap; i < nums.Length; i++)
{
j = i - gap;
temp = nums[i];
while ((j >= 0) && nums[j] > temp )
{
nums[j + gap] = nums[j];
j = j - gap;
}
nums[j + gap] = temp;
}
gap = gap / 2;
sortnum++;
Console.Write("第" + sortnum + "趟排序:");
for (int k = 0; k < nums.Length; k++)
{
Console.Write(nums[k] + " ");
}
Console.WriteLine();
}
}
}
}
控制台主程序中进行调用:
using System;
namespace 希尔排序
{
public class Program
{
public static void Main(string[] args)
{
//随机生成10个数存放进数组,并打印出来:
int[] num = new int[10];
Random random = new Random();
Console.Write("待排数组:");
for (int i = 0; i < num.Length; i++)
{
num[i] = random.Next(1, 100);
Console.Write(num[i] + " ");
}
//显示美观
Console.WriteLine();
ShellSorting shellsorting = new ShellSorting();
shellsorting.ShellSort(num);
Console.ReadKey();
}
}
}
效果展示如下:
视频:希尔排序Shell Sort 舞蹈
http://v.youku.com/v_show/id_XMjU4NTcwMDIw.html
感谢您的阅读