コード例 #1
0
        public static void Test_Array_List(int seed, int n)
        {
            Console.WriteLine("elementų kiekis: " + n);
            Console.WriteLine("\n Operatyviojoje atmintyje suliejimo rykiavimas\n");
            Stopwatch   watch   = new Stopwatch();
            MyDataArray myarray = new MyDataArray(n, seed);
            MyDataArray MySortedArray;
            MyDataList  MySortedList;

            Console.WriteLine("\n masyvas \n");
            myarray.Print(n);
            watch.Start();
            MySortedArray = (MyDataArray)MergeSort(myarray);
            watch.Stop();
            var arrayTime = watch.Elapsed;

            Console.WriteLine("\n isrykiuotas \n");
            MySortedArray.Print(n);
            MyDataList mylist = new MyDataList(n, seed);

            Console.WriteLine("\n sąrašas \n");
            mylist.Print(n);
            watch.Start();
            MySortedList = (MyDataList)MergeSort(mylist);
            watch.Stop();
            var listTime = watch.Elapsed;

            Console.WriteLine("\n isrykiuotas \n");
            MySortedList.Print(n);
            Console.WriteLine("masyvo vykdymo laikas: " + arrayTime + " sąrašo vykdymo laikas: " + listTime);
        }
コード例 #2
0
        //-----------------------------------------------------
        //Masyvo rikiavimas
        private static DataArray MergeSort(DataArray unsorted)                      // kaina | kartai
        {
            if (unsorted.Length <= 1)
            {
                return(unsorted);                                                   //    c1  |  1
            }
            DataArray left;
            DataArray right;

            if (unsorted.GetType() == typeof(MyDataArray))
            {
                left  = new MyDataArray(unsorted.Length / 2);                      //    c2  |  1
                right = new MyDataArray(unsorted.Length / 2 + 1);                  //    c2  |  1
            }
            else
            {
                left  = new MyFileArray(unsorted.Length / 2);                      //    c2  |  1
                right = new MyFileArray(unsorted.Length / 2 + 1);                  //    c2  |  1
            }

            int middle = unsorted.Length / 2; //    c3  | 1

            for (int i = 0; i < middle; i++)  //Dividing the unsorted list
            {
                left.Add(unsorted[i]);
            }
            for (int i = middle; i < unsorted.Length; i++)
            {
                right.Add(unsorted[i]);
            }

            left  = MergeSort(left);
            right = MergeSort(right);
            return(Merge(left, right));
        }
コード例 #3
0
        public static void Test_Array_List_Comparison(int seed, int n)
        {
            Stopwatch   watch   = new Stopwatch();
            MyDataArray myarray = new MyDataArray(n, seed);

            watch.Start();
            MyDataArray MySortedArray = (MyDataArray)MergeSort(myarray);

            watch.Stop();
            var        arrayTime = watch.Elapsed;
            MyDataList mylist    = new MyDataList(n, seed);

            watch.Start();
            MyDataList MySortedList = (MyDataList)MergeSort(mylist);

            watch.Stop();
            var listTime = watch.Elapsed;

            Console.WriteLine("{0, -10} {1, -20}  {2, -20}", n, arrayTime, listTime);
        }
コード例 #4
0
        private static DataArray Merge(DataArray left, DataArray right)
        {
            DataArray result;

            if (right.GetType() == typeof(MyDataArray))
            {
                result = new MyDataArray(left.Length + right.Length);
            }
            else
            {
                result = new MyFileArray(left.Length + right.Length);
            }
            while (left.Length > 0 || right.Length > 0)
            {
                if (left.Length > 0 && right.Length > 0)
                {
                    if (left.First() <= right.First()) //lyginam pirmus elementus
                    {
                        result.Add(left.First());      //idedam pirma
                        left.RemoveFirst();            //pasalinam is kairio pirma
                    }
                    else
                    {
                        result.Add(right.First());
                        right.RemoveFirst();
                    }
                }
                else if (left.Length > 0)
                {
                    result.Add(left.First());
                    left.RemoveFirst();
                }
                else if (right.Length > 0)
                {
                    result.Add(right.First());

                    right.RemoveFirst();
                }
            }
            return(result);
        }