希尔排序的两种方法实现:
方案一:
public static void ShellSort(int[] myarry)
{
int temp;
int n = myarry.Length;
int gap = n / 2;
while (gap != 0)
{
for (int i = gap; i <= myarry.Length - 1; i++)
{
temp = myarry[i];
int j;
for (j = i; j >= gap; j = j - gap)
{
if (temp < myarry[j - gap])
{
myarry[j] = myarry[j - gap];
}
else
break;
}
myarry[j] = temp;
}
gap /= 2;
}
}
static void Main(string[] args)
{
int[] a = { 4, 5, 8, 9, 1, 0, 6, 7, 3, 2 };
Console.Write("希尔排序前:");
for (int i = 0; i <= a.Length - 1; i++)
{
Console.Write("{0}{1}", a[i], " ");
}
ShellSort(a);
Console.Write("\n希尔排序后:");
for (int i = 0; i <= a.Length - 1; i++)
{
Console.Write("{0}{1}", a[i], " ");
}
Console.Read();
}
方案二:
public class ShellSorter
{
public void Sort(int [] list)
{
int inc;
for(inc=1;inc<=list.Length/9;inc=3*inc+1);
for(;inc>0;inc/=3)
{
for(int i=inc+1;i<=list.Length;i+=inc)
{
int t=list[i-1];
int j=i;
while((j>inc)&&(list[j-inc-1]>t))
{
list[j-1]=list[j-inc-1];
j-=inc;
}
list[j-1]=t;
}
}
}
}
public class MainClass
{
public static void Main()
{
int[] iArrary=new int[]{1,5,3,6,10,55,9,2,87,12,34,75,33,47};
ShellSorter sh=new ShellSorter();
sh.Sort(iArrary);
for(int m=0;m<=13;m++)
Console.WriteLine("{0}",iArrary[m]);
}
}