class Program
{
static void Main(string[] args)
{
int[] a = new int[30];
Random rd = new Random();
for (int i = 0; i < a.Length ; i++)
{
a[i] = rd.Next(1, 101);
}
for (int i = 0; i < a.Length ; i++)
{
Console.Write(a[i] + " ");
}
Console.WriteLine();
ShellSort(a, a.Length);
for (int i = 0; i < a.Length ; i++)
{
Console.Write(a[i]+" ");
}
Console.ReadKey();
}
static void ShellSort(int[] a, int n)
{
int d, i, j, x;
d = n / 2;//需要排序的数组取一半
while (d >= 1)//循环至增量为1的时候结束
{
for (i = d; i < n; i++)
{
x = a[i];//获取数列中的下一个数据
j = i - d;//数列中前一个数据的序号,j=0
while (j >= 0 && a[j] > x)//下一个数大于前一个数,j就是第一数据
{
a[j + d] = a[j];//符合一个数向前移动,交换数据
j = j - d;//修改序号,继续向前
}
a[j + d] = x;//保存数据,将原本就比j大的数据x赋值给d+j的数据
}
d /= 2;//缩小增量
}
}
}
希尔排序
最新推荐文章于 2024-10-01 23:05:47 发布