希尔排序

来源:互联网 发布:php 通过域名获取ip 编辑:程序博客网 时间:2024/06/04 19:27

希尔排序的两种方法实现:

方案一:

 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]); } }