Advertisement
Guest User

Untitled

a guest
Oct 13th, 2019
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.69 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 zad2
  8. {
  9. //    Zadanie 2
  10.  
  11. //Zaprojektuj algorytm wykonujący łączenie dwóch ciągów niemalejących w jeden ciąg uporządkowany niemalejąco.
  12.  
  13. //Nie korzystaj z sortowania.Do rozwiązania dodaj analizę pesymistycznej złożoności swojego algorytmu, uzasadnij że algorytm się zakończy.
  14.     class Program
  15.     {
  16.         static void PrzesunIndeks(List<int> c1, int i)
  17.         {
  18.             c1.Add(0);
  19.             List<int> temp = new List<int>(c1);
  20.             for (int j = i; j < c1.Count - 1; j++)
  21.             {
  22.                 c1[j + 1] = temp[j];
  23.             }
  24.         }
  25.         static void WypiszListe(List<int>L)
  26.         {
  27.             for (int i = 0; i < L.Count; i++)
  28.             {
  29.                 Console.Write(L[i]+" ");
  30.             }
  31.         }
  32.         static List<int> PolaczCiagi(List<int> c1, List<int> c2)
  33.         {
  34.             if (c1[c1.Count - 1] <= c2[0]) //jak ostatni wyraz c1 jest mniesjszy od pierwszego wyrazu c2 to po prostu dodaje c1 + c2
  35.             {
  36.                 for (int i = 0; i < c2.Count; i++)
  37.                 {
  38.                     c1.Add(c2[i]);
  39.                 }
  40.                 return c1;
  41.             }
  42.             if (c2[c2.Count - 1] <= c1[0])// jak ostatni wyraz c2 jest mniejszy od pierwszego wyrazu c1, to po prostu dodaje c2 + c1
  43.             {
  44.                 for (int i = 0; i < c1.Count; i++)
  45.                 {
  46.                     c2.Add(c1[i]);
  47.                 }
  48.                 return c2;
  49.             }
  50.             if (c1.Count>c2.Count) //jesli c1 jest dluzszy
  51.             {
  52.                 Pesymistyczny(c1, c2);
  53.                 return c1;
  54.             }
  55.             Pesymistyczny(c2, c1); //jesli c2 jest dluzszy bądz sa rowne
  56.             return c2;
  57.            
  58.         }
  59.         static void Pesymistyczny(List<int>c1,List<int>c2)
  60.         {
  61.             int k=0;
  62.             //sprawdzam zerowy wyraz, jak warunek spelniony to dalej w petli zaczynam od pierwszego zeby sie nie dublowaly
  63.             if(c2[0]<=c1[0])  
  64.             {
  65.                 PrzesunIndeks(c1, 0);
  66.                 c1[0] = c2[0];
  67.                 k = 1;
  68.             }
  69.             int u = c2.Count;
  70.             //sprawdzam ostatni wyraz, jak warunek spelniony to dalej w petli sprawdzam do przedostatniego zeby sie nie dublowaly
  71.             if (c2[c2.Count-1]>=c1[c1.Count-1])
  72.             {
  73.                 c1.Add(c2[c2.Count - 1]);
  74.                 u = c2.Count-1;
  75.             }
  76.             for (int i = k; i < u; i++)//petla od krotszego ciagu,  uwzgledniajaca pierwszy i ostatni wyraz zaleznie od poprzednich ifow
  77.             {
  78.                 for (int j = 0; j < c1.Count-1; j++) //petla od dluzszego ciagu
  79.                 {
  80.                     if (c2[i] >= c1[j]&&c2[i]<=c1[j+1]) //sprawdzam czy wyraz ciagu krotszego lezy miedzy dwoma wyrazami dluzszeho, jak tak to go wstawiam i przerywam
  81.                     {
  82.                         PrzesunIndeks(c1,j+1);
  83.                         c1[j + 1] = c2[i];
  84.                         break;
  85.                     }
  86.                 }
  87.             }
  88.         }
  89.         static void Main(string[] args)
  90.         {
  91.             List<int> c1 = new List<int>();
  92.             List<int> c2 = new List<int>();
  93.             c1.Add(13);
  94.             c1.Add(15);
  95.             c1.Add(31);
  96.            c1.Add(66);
  97.             c2.Add(1);
  98.             c2.Add(20);
  99.             c2.Add(45);
  100.             c2.Add(66);
  101.            
  102.            
  103.  
  104.  
  105.           List<int> wynik=new List<int>(  PolaczCiagi(c1, c2));
  106.             WypiszListe(wynik);
  107.        
  108.          
  109.             Console.ReadKey();
  110.         }
  111.     }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement