Advertisement
Guest User

Untitled

a guest
Apr 27th, 2015
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.55 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Diagnostics;
  7.  
  8. namespace ConsoleApplication9
  9. {
  10.     class Program
  11.     {
  12.         static Stopwatch timerQS = new Stopwatch();
  13.         static Stopwatch timerMS = new Stopwatch();
  14.         static Stopwatch timerIS = new Stopwatch();
  15.         static Stopwatch timerHS = new Stopwatch();
  16.         static Stopwatch calosc = new Stopwatch();
  17.         static double[,] czasQS = new double[8,5];
  18.         static double[,] czasMS = new double[8,5];
  19.         static double[,] czasIS = new double[8,5];
  20.         static double[,] czasHS = new double[8,5];
  21.         static int[] rozmiar = { 10000, 50000, 100000, 500000, 1000000 };
  22.         static float[] procent = { 0f, 0.25f, 0.5f, 0.75f, 0.95f, 0.99f, 0.997f, -1f };
  23.         static void Main(string[] args)
  24.         {
  25.             calosc.Start();
  26.  
  27.             int IloscProb = 100;
  28.             for (int k = 0; k < procent.Count(); k++)
  29.                 for (int i = 0; i < rozmiar.Count(); i++)
  30.                 {
  31.  
  32.                     for (int j = 0; j < IloscProb; j++)
  33.                     {
  34.                         ToSort QS = new ToSort(rozmiar[i], procent[k]);
  35.                         ToSort MS = new ToSort(QS);
  36.                         ToSort IS = new ToSort(QS);
  37.                         ToSort HS = new ToSort(QS);
  38.  
  39.                         timerMS.Reset();
  40.                         timerMS.Start();
  41.                         MS.MergeSort();
  42.                         timerMS.Stop();
  43.                         czasMS[k,i] += timerMS.ElapsedMilliseconds;
  44.  
  45.  
  46.                         timerQS.Reset();
  47.                         timerQS.Start();
  48.                         QS.QuickSort();
  49.                         timerQS.Stop();
  50.                         czasQS[k,i] += timerQS.ElapsedMilliseconds;
  51.  
  52.                         timerIS.Reset();
  53.                         timerIS.Start();
  54.                         IS.IntroSort();
  55.                         timerIS.Stop();
  56.                         czasIS[k,i] += timerIS.ElapsedMilliseconds;
  57.  
  58.                         timerHS.Reset();
  59.                         timerHS.Start();
  60.                         HS.HeapSort();
  61.                         timerHS.Stop();
  62.                         czasHS[k,i] += timerHS.ElapsedMilliseconds;
  63.                     }
  64.                     czasQS[k,i] = czasQS[k,i] / IloscProb;
  65.                     czasMS[k,i] = czasMS[k,i] / IloscProb;
  66.                     czasIS[k,i] = czasIS[k,i] / IloscProb;
  67.                     czasHS[k,i] = czasHS[k,i] / IloscProb;
  68.                     Console.WriteLine("Sredni czas MergeSort o rozmiarze {0} i posortowaniu {2:P2}: {1:F4} ms.", rozmiar[i], czasMS[k,i], procent[k]);
  69.                     Console.WriteLine("Średni czas QuickSort o rozmiarze {0} i posortowaniu {2:P2}: {1:F4} ms.", rozmiar[i], czasQS[k,i], procent[k]);
  70.                     Console.WriteLine("Średni czas IntroSort o rozmiarze {0} i posortowaniu {2:P2}: {1:F4} ms.", rozmiar[i], czasIS[k,i], procent[k]);
  71.                     Console.WriteLine("Średni czas HeapSort  o rozmiarze {0} i posortowaniu {2:P2}: {1:F4} ms.\n\n", rozmiar[i], czasHS[k,i], procent[k]);
  72.  
  73.                 }
  74.             SaveFile("kek");
  75.             calosc.Stop();
  76.             Console.WriteLine(calosc.Elapsed + "s");
  77.             Console.ReadKey();
  78.         }
  79.  
  80.         static public void SaveFile(string fileName)
  81.         {
  82.             System.IO.StreamWriter file = new System.IO.StreamWriter(fileName + ".txt",false);
  83.             for (int i = 0; i < procent.Count(); i++)
  84.             {
  85.                 file.WriteLine(procent[i]);
  86.                 StringBuilder sb = new StringBuilder();
  87.                 for (int j = 0; j < rozmiar.Count(); j++)
  88.                 {
  89.                     sb.Append(rozmiar[j] + " " + czasMS[i,j] + " " + czasQS[i,j] + " " + czasIS[i,j] + " " + czasHS[i,j]+"\n");
  90.                 }
  91.                 file.WriteLine(sb);
  92.                 file.WriteLine();
  93.             }
  94.             file.Close();
  95.             Console.WriteLine("Udany zapis do pliku");
  96.         }
  97.     }
  98.     class ToSort
  99.     {
  100.         #region Wspolne Podstawy Klasy
  101.         public static Random r = new Random();
  102.         public int[] tablica;
  103.         public int rozmiar;
  104.         int[] temp;
  105.         float ilePosortowanych;
  106.         int j = 0;
  107.         public ToSort(ToSort ts)
  108.         {
  109.             this.rozmiar = ts.rozmiar;
  110.             tablica = new int[rozmiar];
  111.             Array.Copy(ts.tablica, tablica,rozmiar);
  112.  
  113.         }
  114.  
  115.         public ToSort(int rozm, float procent)
  116.         {
  117.             rozmiar = rozm;
  118.             ilePosortowanych = procent;
  119.             tablica = new int[rozmiar];
  120.             WypelnijTablice();
  121.         }
  122.  
  123.  
  124.         void WypelnijTablice()
  125.         {
  126.             for (j = 0; j < rozmiar; j++)
  127.                 tablica[j] = r.Next(21);
  128.             if(ilePosortowanych>0)
  129.                 Array.Sort(tablica, 0, (int)(ilePosortowanych * rozmiar));
  130.             if(ilePosortowanych<0)
  131.                 Array.Sort(tablica,new Comparison<int>((i1,i2)=>i2.CompareTo(i1)));
  132.         }
  133.         public void Print()
  134.         {
  135.             Console.WriteLine("\n");
  136.             foreach (int i in tablica)
  137.                 Console.Write(String.Format("{0,4}", i));
  138.             Console.WriteLine("\n");
  139.         }
  140. #endregion
  141.         private static int whiler = 0;
  142.         private static int heaper = 0;
  143.         #region QuickSort
  144.         public void QuickSort()
  145.         {
  146.             QuickSort(0, rozmiar - 1);
  147.         }
  148.  
  149.         public void QuickSort(int p, int o)
  150.         {
  151.             int i = p;
  152.             int j = o;
  153.             int pivot = tablica[(i + j) / 2];
  154.             while (i < j)
  155.             {
  156.                 while (tablica[i] < pivot) i++;
  157.                 while (tablica[j] > pivot) j--;
  158.                 if (i <= j)
  159.                     Swap(i++, j--);
  160.             }
  161.             if (p < j) QuickSort(p, j);
  162.             if (i < o) QuickSort(i, o);
  163.  
  164.         }
  165.         void Swap(int p, int o)
  166.         {
  167.             int temp = tablica[p];
  168.             tablica[p] = tablica[o];
  169.             tablica[o] = temp;
  170.         }
  171.         #endregion
  172.         #region MergeSort
  173.         public void MergeSort()
  174.         {
  175.             temp = new int[rozmiar];
  176.             MergeSort(0, rozmiar - 1);
  177.         }
  178.         void MergeSort(int p, int o)
  179.         {
  180.             if (p < o)
  181.             {
  182.                 int srodek = (p + o) / 2;
  183.                 MergeSort(p, srodek);
  184.                 MergeSort(srodek+1, o);
  185.                 Merge(p, srodek, o);
  186.             }
  187.         }
  188.         void Merge(int p, int s, int o)
  189.         {
  190.             for (int k = p; k <= o; k++)
  191.                 temp[k] = tablica[k];
  192.  
  193.             int i = p;
  194.             int j = s + 1;
  195.             int r = p;
  196.  
  197.             while (i <= s && j <= o)
  198.             {
  199.                 if (temp[i] < temp[j])
  200.                     tablica[r++] = temp[i++];
  201.                 else
  202.                     tablica[r++] = temp[j++];
  203.             }
  204.             while (i <= s)
  205.                 tablica[r++] = temp[i++];
  206.         }
  207.         #endregion
  208.         #region IntroSort
  209.         public void IntroSort()
  210.         {
  211.             Intro_Sort(0, rozmiar-1, Convert.ToInt16(2*Math.Floor(Math.Log(rozmiar)/Math.Log(2))));
  212.             InsertionSort(0, rozmiar - 1);
  213.         }
  214.         void Intro_Sort(int p, int o, int limit)
  215.         {
  216.             while(o-p >= 16)
  217.             {
  218.                 //Console.WriteLine("W while {0}",limit);
  219.                 int i;
  220.  
  221.                 if (limit <= 0)
  222.                 {
  223.                     Console.WriteLine("W heap {0}", ++heaper);
  224.                     HeapSort(p, o);
  225.                     return;
  226.                 }
  227.                 i = Partition(p, o);
  228.                 limit--;
  229.                 Intro_Sort(i, o, limit);
  230.                 o = i;
  231.             }
  232.         }
  233.         int Partition(int p, int o)
  234.         {
  235.             int i = p;
  236.             int j = o;
  237.             int pivot = tablica[(i + j) / 2];
  238.             while (true)
  239.             {
  240.                 while (tablica[i] < pivot) i++;
  241.                 j--;
  242.                 while (tablica[j] > pivot) j--;
  243.                 if (!(i < j))
  244.                     return i;
  245.                 Swap(i, j);
  246.                 i++;
  247.             }
  248.            
  249.         }
  250.  
  251.         public void HeapSort()
  252.         {
  253.             HeapSort(0, rozmiar - 1);
  254.         }
  255.  
  256.         void HeapSort(int p, int o)
  257.         {
  258.             for (int i = o/2; i >= 0; i--)
  259.             {
  260.                 Heapify(i,rozmiar-1);
  261.             }
  262.             for (int i = o-2; i >=0; i--)
  263.             {
  264.                 Swap(0, i+1);
  265.                 Heapify(0, i);
  266.             }
  267.         }
  268.         void Heapify(int p,int o)
  269.         {
  270.           //  Print();
  271.             int temp = tablica[p];
  272.             int j = 2 * p;
  273.             while (j <= o)
  274.             {
  275.                 if (j < o && tablica[j] < tablica[j + 1]) j++;
  276.                 if (temp >= tablica[j])
  277.                     break;
  278.                 tablica[j / 2] = tablica[j];
  279.                 j = j * 2;
  280.             }
  281.             tablica[j / 2] = temp;
  282.         }
  283.         void InsertionSort(int p, int o)
  284.         {
  285.             int j, value;
  286.             for (int i = 1; i < rozmiar; i++)
  287.             {
  288.                 j = i;
  289.                 value = tablica[i];
  290.                 while ((j > 0) && (tablica[j - 1]) > value)
  291.                 {
  292.                     tablica[j] = tablica[--j];
  293.                 }
  294.                 tablica[j] = value;
  295.             }
  296.         }
  297.         #endregion
  298.     }
  299. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement