基本ソートアルゴリズム(バブルソート、選択ソート、挿入ソート)の後続[時間テスト]

5202 ワード

using System;
using System.Diagnostics;

namespace TestCArray
{
    class Program
    {
        static void Main(string[] args)
        {          
            Timing sortTime = new Timing();

            // int numItems = 1000;
            // int numItems = 10000;
            int numItems = 100000;
            CArray theArray; 
                  
            theArray = new CArray(numItems);
            sortTime.StartTime();
            theArray.InsertionSort();
            sortTime.StopTime();
            Console.WriteLine("InsertionSort ----->" + sortTime.Result().TotalMilliseconds);
            theArray.Clear();

            theArray = new CArray(numItems);
            sortTime.StartTime();
            theArray.BubbleSort();
            sortTime.StopTime();
            Console.WriteLine("BubbleSort ----->"+sortTime.Result().TotalMilliseconds);
            theArray.Clear();

            theArray = new CArray(numItems);
            sortTime.StartTime();
            theArray.SelectionSort();
            sortTime.StopTime();
            Console.WriteLine("SelectionSort ----->" + sortTime.Result().TotalMilliseconds);
            theArray.Clear();
        }
    }


    public class CArray
    {
        private int[] arr;
        private int upper;
        private int numElements;

        Random rnd = new Random(100);

        public CArray(int size)
        {
            arr = new int[size];
            upper = size - 1;
            numElements = 0;

            Init();
        }

        public void Insert(int item)
        {
            arr[numElements] = item;
            numElements++;
        }

        public void Init()
        {
            for (int i = 0; i <= upper; i++)
            {
                Insert(rnd.Next() * 100);
            }
        }

        public void DisplayElements()
        {
            Console.Write("---->");
            for (int i = 0; i <= upper; i++)
            {
                Console.Write(arr[i] + " ");
            }
            Console.WriteLine();
        }

        public void Clear()
        {
            for (int i = 0; i <= upper; i++)
            {
                arr[i] = 0;
            }

            numElements = 0;
        }

        //  
        public void BubbleSort()
        {
            int temp;

            for (int outer = 0; outer <= upper; outer++)
            {
                for (int inner = 0; inner < upper-outer; inner++)
                {
                    if (arr[inner+1]<arr[inner])
                    {
                        temp = arr[inner + 1];
                        arr[inner + 1] = arr[inner];
                        arr[inner] = temp;
                    }
                }
                //this.DisplayElements();
            }      
        }

        //  
        public void SelectionSort()
        {
            int temp;
            for (int outer = 0; outer < upper; outer++)
            {
                for (int inner = outer+1; inner <= upper; inner++)
                {
                    if (arr[outer] > arr[inner])
                    {
                        temp = arr[outer];
                        arr[outer] = arr[inner];
                        arr[inner] = temp;
                    }
                }
                //this.DisplayElements();
            }
        }

        //  
        public void InsertionSort()
        {
            int inner, temp;
            for (int outer = 1; outer <= upper; outer++)
            {
                temp = arr[outer];
                inner = outer;

                while (inner > 0 && arr[inner-1] >= temp)
                {
                    arr[inner] = arr[inner - 1];
                    inner -= 1;
                }

                arr[inner] = temp;

                //this.DisplayElements();
            }
        }
    }

    /// <summary>
    ///  
    /// </summary>
    public class Timing
    {
        /// <summary>
        ///  
        /// </summary>
        private TimeSpan startingTime;

        /// <summary>
        ///  
        /// </summary>
        private TimeSpan duration;

        /// <summary>
        ///  
        /// </summary>
        public Timing()
        {
            startingTime = new TimeSpan(0);
            duration = new TimeSpan(0);
        }

        /// <summary>
        ///  
        /// </summary>
        public void StopTime()
        {
            duration = Process.GetCurrentProcess().Threads[0]
                .UserProcessorTime.Subtract(startingTime);
        }

        /// <summary>
        ///  
        /// </summary>
        public void StartTime()
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
            startingTime = Process.GetCurrentProcess().Threads[0].UserProcessorTime;
        }

        /// <summary>
        ///  
        /// </summary>
        /// <returns></returns>
        public TimeSpan Result()
        {
            return duration;
        }
    }
}