Advertisement
Guest User

Untitled

a guest
Jan 26th, 2020
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.18 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.  
  7. namespace Sorty
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             int[] tab = new int[] { 10, 9, 8, 7, 6};
  14.             Console.Write("Przed sortowaniem: ");
  15.             wypisz();
  16.            
  17.             int[] tab1 = new int[] { 10, 9, 8, 7, 6 };
  18.             Bsort(tab1);
  19.             Console.Write("BubbleSort: ");
  20.             wypisz();
  21.  
  22.             int[] tab2 = new int[] { 10, 9, 8, 7, 6 };
  23.             InsertionSort(tab2);
  24.             Console.Write("InsertionSort: ");
  25.             wypisz();
  26.            
  27.             int[] tab3 = new int[] { 10, 9, 8, 7, 6 };
  28.             SelectionSort(tab3);
  29.             Console.Write("Selection: ");
  30.             wypisz();
  31.            
  32.             int[] tab4 = new int[] { 10, 9, 8, 7, 6 };
  33.             Console.Write("CountingSort: ");
  34.             CSort(tab);
  35.  
  36.             int[] tab5 = new int[] { 10, 9, 8, 7, 6 };
  37.             QuickSort(tab5,0,tab.Length-1);
  38.             Console.Write("\n\nQuickSort: ");
  39.             wypisz();
  40.  
  41.             int[] tab6 = new int[] { 10, 9, 8, 7, 6 };
  42.             MergeSort(tab6, 0, tab.Length - 1);
  43.             Console.Write("MergeSort: ");
  44.             wypisz();
  45.  
  46.             void wypisz()
  47.             {
  48.                 foreach (int i in tab)
  49.                 {
  50.                     Console.Write(i + " ");
  51.                 }
  52.                 Console.WriteLine("\n");
  53.             }
  54.             Console.ReadKey();
  55.         }
  56.         static void Swap(int[] tab, int p, int d) //zamienia pierwszą z drugą
  57.         {
  58.             var tmp = tab[p];
  59.             tab[p] = tab[d];
  60.             tab[d] = tmp;
  61.         }
  62.         static void Bsort(int[] tab)
  63.         {
  64.             bool czyZmiana = false; //czyZmiana = false, gdyż żadna wartość nie została jeszcze zeSwapowana
  65.             do
  66.             {
  67.                 czyZmiana = false; //czyZmiane ustawia na false z każdym zapętleniem żeby for działał dopóki nie zamienią się wszystkie wartości
  68.                 for (int i = 0; i < tab.Length-1 ; i++)
  69.                 {
  70.                     if (tab[i] > tab[i + 1])
  71.                     {
  72.                         Swap(tab, i,i+1); //Jeśli pierwsza liczba jest > od drugiej, zamień je
  73.                         czyZmiana = true; //jeśli była zamiana ustawia na true
  74.                     }
  75.                 }
  76.             } while (czyZmiana) ;
  77.         }
  78.         static void InsertionSort(int[] tab)
  79.         {
  80.             for (int i =1;i<tab.Length;i++)
  81.             {
  82.                 int obecna = tab[i]; //następna liczba jeszcze nie posortowana
  83.                 int indexPierw = i - 1; //index wczesniejsza liczby, już w tablicy posortowanej
  84.  
  85.                 while (indexPierw >= 0 && tab[indexPierw] > obecna) //wykonuje się dopóki index wczesniejsze > 0 i wczesniejsza > następnej
  86.                 {
  87.                     obecna = tab[indexPierw]; //obecną zamienia na wczesniejszą
  88.                     indexPierw -= 1; //wczesniejszą zamienia na jeszcze wcześniejszą i pętla wykonuje się ponownie dla niej
  89.                 }
  90.             }
  91.         }
  92.         static void SelectionSort(int[] tab)
  93.         {
  94.             int minIndex;
  95.             for (int i = 0; i < tab.Length - 1; i++) //pętla po całej tablicy
  96.             {
  97.                 minIndex = i; //index minimalnej ustawionej na pierwszą liczbę
  98.                 for (int j = i+1; j<tab.Length;j++) //pętla po tabliczy z wyjatkiem minIndex
  99.                 {
  100.                     if (tab[j] < tab[minIndex]) //jeśli wartosc drugiej < od pierwszej
  101.                     {
  102.                         minIndex = j; //minIndexeb bedzie index tej drugiej
  103.                     }
  104.                 }
  105.                 Swap(tab, minIndex, i); //zamienia znalezioną najmniejszą z tą pierwszą z pętli z 1 for'a
  106.             }
  107.         }
  108.         static void CSort(int[] tab)
  109.         {
  110.             int max = 0;
  111.             //znajduje maxymalną
  112.             for (int i = 0; i < tab.Length; i++)
  113.             {
  114.                 if (max < tab[i])
  115.                     max = tab[i];
  116.             }
  117.             //tworzy tablicę zer(częstotliwości)
  118.             int[] freq = new int[max+1];
  119.             for (int i = 0; i <= max; i++)
  120.             {
  121.                 freq[i] = 0;
  122.             }
  123.             //jeśli liczba tab[i] == indexowi tablicy frq wtedy +=1
  124.             for (int i = 0; i < tab.Length; i++) //for po wszystkich indexach tab nieposortowanej
  125.             {
  126.                 for (int j = 0; j < max; j++) //for po wszystkich indexach tab freq
  127.                 {
  128.                     if (tab[i] == j)
  129.                     {
  130.                         freq[j] += 1;
  131.                     }
  132.                 }
  133.             }
  134.             for (int i = 0; i <= max; i++)
  135.             {
  136.                 for (int j = 0; j < freq[i] ; j++)
  137.                     Console.Write(i + " ");
  138.  
  139.             }
  140.         }
  141.         static void QuickSort(int[] tab, int poczatek, int koniec)
  142.         {
  143.             int L = poczatek;
  144.             int P = koniec;
  145.             int S = tab[(poczatek + koniec) / 2]; //srodek
  146.             while (L < P) //dopoki lewy index < prawy index
  147.             {
  148.                 while (tab[L] < S) L++; //dopóki warosc z lewej < wartosc srodka ; index lewy++
  149.                 while (tab[P] > S) P--; //dopóki warosc z prawej > wartosc srodka ; index prawy--
  150.                 if (L <= P)
  151.                 {
  152.                     Swap(tab, L, P); //zamien wartosc z lewgo indexu z wartoscia z prawego indexu
  153.                     L++;
  154.                     P--;
  155.                 }
  156.             }
  157.             if (poczatek < P) QuickSort(tab, poczatek, P);
  158.             if (L < koniec) QuickSort(tab, L, koniec);
  159.         }
  160.         static void Merge(int[] tab,int poczatek, int koniec)
  161.         {
  162.             int[] tmp = new int[tab.Length];
  163.             for (int i = poczatek; i <= koniec; i++) //przepisanie wartosci tablicy do tymczasowej
  164.             {
  165.                 tmp[i] = tab[i];
  166.             }
  167.             int P = poczatek; //pocz tab nieposortowanej tymczasowej
  168.             int S = (poczatek + koniec) / 2 +1; //index srodek
  169.             int Ptmp = poczatek; //pocz tab nieposortowanej
  170.             while (P <= poczatek+koniec/2  && S <= koniec)
  171.             {
  172.                 if (tmp[P] < tmp[S])
  173.                 {
  174.                     tab[Ptmp] = tmp[P];
  175.                     Ptmp++;
  176.                     P++;
  177.                 }
  178.                 else
  179.                 {
  180.                     tab[Ptmp] = tmp[S];
  181.                     Ptmp++;
  182.                     S++;
  183.                 }
  184.  
  185.             }
  186.             while (P <= (poczatek+koniec)/2)
  187.             {
  188.  
  189.                 tab[Ptmp] = tmp[P];
  190.                 Ptmp++;
  191.                 P++;
  192.             }
  193.         }
  194.  
  195.         static void MergeSort(int[] tab,int pocz, int kon)
  196.         {
  197.             if (pocz < kon)
  198.             {
  199.                 Merge(tab, pocz, (pocz + kon) / 2); //scalanie lewej
  200.                 Merge(tab, (pocz + kon) / 2 + 1, kon); //scalanie prawej
  201.                 Merge(tab, pocz, kon); //scalanie
  202.             }
  203.         }
  204.     }
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement