using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 希尔排序
{
class Program
{
static int[] data = new int[8];
static int size = 8;
static void Main(string[] args)
{
InputArr();
Console.WriteLine("您输入的原始数组是:");
Showdata();
Shell();
}
static void InputArr()
{
for (int i = 0; i < size; i++)
{
try
{
Console.Write("请输入第" + (i + 1) + "个元素:");
data[i] = int.Parse(Console.ReadLine());
}
catch (Exception e)
{
}
}
}
static void Showdata()
{
for (int i = 0; i < size; i++)
{
Console.Write(data[i] + " ");
}
Console.WriteLine();
}
static void Shell()
{
int i;
//i为扫描次数
int j;
//以j来定位比较的元素
int k = 1;
//k打印计数
int tmp;
//tmp用来暂存数据
int jmp;
//设置间据位移量
jmp = size / 2;
while (jmp != 0)
{
for (i = jmp; i < size; i++)
{
tmp = data[i];
j = i - jmp;
while (j >= 0 && tmp < data[j])
//插入排序法
{
data[j + jmp] = data[j];
j = j - jmp;
}
data[jmp + j] = tmp;
}
Console.Write("第" + (k++) + "次扫描的排序结果为:");
Showdata();
jmp = jmp / 2;
//控制循环次数
}
}
}
}
希尔排序法的分析:
- 希尔排序法和插入排序法一样,都是稳定排序
- 因为只需要一个额外空间,所以空间复杂度最佳
- 此排序发是用于数据大部分都已排序完成的情况
《图解数据结构使用C# 》P310