关于排序算法耗时问题。

来源:互联网 发布:旅游用哪个软件好 编辑:程序博客网 时间:2024/05/01 08:38

写了一个类用于计时:

    class Time:IDisposable    {        private DateTime _time;        public Time()        {            _time = DateTime.Now;        }        public void Dispose()        {            TimeSpan _tmp=DateTime.Now-_time;            Console.WriteLine("耗时(毫秒):" + _tmp.TotalMilliseconds);            Console.WriteLine("");        }    }


 

各种排序算法:

       //快速排序        public static void QuickShort(int[] iarray,int l,int r)        {            if (l < r)            {                int i = l, j = r; int x = iarray[l];                while (i < j)                {                    while (i < j && iarray[j] >= x) j--;                    if (i < j)                    {                        iarray[i] = iarray[j];                        i++;                    }                    while (i < j && iarray[i] < x) i++;                    if (i < j)                    {                        iarray[j] = iarray[i];                        j--;                    }                }                iarray[i] = x;                QuickShort(iarray,l,i-1);                QuickShort(iarray, i + 1, r);            }        }        //冒泡排序        public static void MaoPaoShort(int[] iarray)        {            for(int i=0;i<iarray.Length;i++)                for (int j = 1; j < iarray.Length - i; j++)                  {                    if (iarray[j-1] > iarray[j])                    {                        int tmp = iarray[j-1];                        iarray[j-1] = iarray[j];                        iarray[j] = tmp;                    }                }        }        //希尔排序        public static void ShellShort(int[] iarray)        {            for(int gap=iarray.Length/2;gap>0;gap/=2)                for(int i=gap;i<iarray.Length;i++)                    for(int j=i-gap;j>=0&&iarray[j] > iarray[j + gap];j-=gap)                    {                        int tmp = iarray[j];                        iarray[j] = iarray[j + gap];                        iarray[j + gap] = tmp;                    }        }        //插入排序        public static void InsertSort(int[] a, int n)        {        int i, j;        for (i = 1; i < n; i++)                for (j = i - 1; j >= 0 && a[j] > a[j + 1]; j--)                {                    int tmp = a[j];                    a[j] = a[j + 1];                    a[j + 1] = tmp;                }        }


主函数测试部分:

        static void Main(string[] args)        {            Random rd=new Random();            int[] iarray=new int[100000];            for (int i = 0; i < iarray.Length; i++)            {                iarray[i] = rd.Next(0,132456);            }            using (new Time())            {                Console.WriteLine("快速排序:");                QuickShort(iarray, 0, iarray.Length - 1);            }            for (int i = 0; i < iarray.Length; i++)            {                iarray[i] = rd.Next(0, 132456);            }            using (new Time())            {                Console.WriteLine("希尔排序:");                ShellShort(iarray);            }            for (int i = 0; i < iarray.Length; i++)            {                iarray[i] = rd.Next(0, 132456);            }            using (new Time())            {                Console.WriteLine("插入排序:");                InsertSort(iarray,iarray.Length);            }            for (int i = 0; i < iarray.Length; i++)            {                iarray[i] = rd.Next(0, 132456);            }            using (new Time())            {                Console.WriteLine("冒泡排序:");                MaoPaoShort(iarray);            }            //foreach (int k in iarray)            //    Console.Write(k.ToString() + "  ");        }


测试结果:

1万个数耗时

 

10万个数耗时


不同电脑测试结果会有所不同,楼主的机子比较差=  =

原创粉丝点击