关于排序算法性能问题。

首先写了一个类用于计时:

    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万个数耗时


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

原文地址:https://www.cnblogs.com/fornet/p/2987388.html