Advertisement
Guest User

Untitled

a guest
Dec 15th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.75 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 Knut
  8. {
  9.     class Sort7
  10.     {
  11.         //‘Быстрая сортирвка
  12.         List<Info> initialArray = new List<Info>();
  13.         List<Info3> stack = new List<Info3>();
  14.         public void Run()
  15.         {
  16.             Init();
  17.             PrintAll();
  18.             RunSort();
  19.             PrintAll();
  20.         }
  21.         void Init()
  22.         {
  23.             initialArray.Clear();
  24.             Random r = new Random();
  25.             int n = r.Next() % 10 + 10;
  26.             for (int i = 0; i < n; i++)
  27.             {
  28.                 int a = r.Next() % 100;
  29.                 int b = r.Next() % 2;
  30.                 if (b == 0) a = -a;
  31.                 initialArray.Add(new Info()
  32.                 {
  33.                     key = a,
  34.                     text = "Text for " + a
  35.                 });
  36.             }
  37.         }
  38.         void PrintAll()
  39.         {
  40.             Console.WriteLine("Key" + " \t " + "Some info");
  41.             for (int i = 0; i < initialArray.Count; i++)
  42.             {
  43.                 Console.WriteLine(initialArray[i].key + " \t " + initialArray[i].text);
  44.             }
  45.             Console.WriteLine("------------------------------");
  46.         }
  47.         void RunSort()
  48.         {
  49.             int M = 5;
  50.             int N = initialArray.Count;
  51.             int l, r;
  52.             int K, j, i;
  53.             if (N <= M)
  54.             {
  55.                 RunSimpleInsertSort();
  56.             }
  57.             else
  58.             {
  59.                 l = 1 - 1;
  60.                 r = N - 1;
  61.                 do
  62.                 {
  63.                     i = l - 1;
  64.                     j = r + 1 - 1;
  65.                     K = initialArray[l].key;
  66.                     do
  67.                     {
  68.                         do
  69.                         {
  70.                             i++;
  71.                             if (!(initialArray[i].key < K))
  72.                             {
  73.                                 break;
  74.                             }
  75.                         } while (true);
  76.                         do
  77.                         {
  78.                             j--;
  79.                             if (!(K < initialArray[j].key))
  80.                             {
  81.                                 break;
  82.                             }
  83.                         } while (true);
  84.                         if (j <= i)
  85.                         {
  86.                             Info temp = initialArray[l];
  87.                             initialArray[l] = initialArray[j];
  88.                             initialArray[j] = temp;
  89.                             break;
  90.                         }
  91.                         else
  92.                         {
  93.                             Info temp = initialArray[i];
  94.                             initialArray[i] = initialArray[j];
  95.                             initialArray[j] = temp;
  96.                         }
  97.                     } while (true);
  98.                     if ((r - j >= j - l) && (j - l > M))
  99.                     {
  100.                         stack.Add(new Info3()
  101.                         {
  102.                             a = j + 1,
  103.                             b = r
  104.                         });
  105.                         r = j - 1;
  106.                         continue;
  107.                     }
  108.                     else if ((j - l > r - j) && (r - j > M))
  109.                     {
  110.                         stack.Add(new Info3()
  111.                         {
  112.                             a = l,
  113.                             b = j - 1
  114.                         });
  115.                         l = j + 1;
  116.                         continue;
  117.                     }
  118.                     else if ((r - j > M) && (M >= j - l))
  119.                     {
  120.                         l = j + 1;
  121.                         continue;
  122.                     }
  123.                     else if ((j - l > M) && (M >= r - j))
  124.                     {
  125.                         r = j - 1;
  126.                         continue;
  127.                     }
  128.                     else
  129.                     {
  130.                         if (stack.Count != 0)
  131.                         {
  132.                             var temp = stack[stack.Count - 1];
  133.                             l = temp.a;
  134.                             r = temp.b;
  135.                             stack.RemoveAt(stack.Count - 1);
  136.                         }
  137.                         else
  138.                         {
  139.                             break;
  140.                         }
  141.                     }
  142.                 } while (true);
  143.                 PrintAll();
  144.                 RunSimpleInsertSort();
  145.  
  146.             }
  147.  
  148.         }
  149.         void RunSimpleInsertSort()
  150.         {
  151.             int i, j;
  152.             for (j = 1; j < initialArray.Count; j++)
  153.             {
  154.                 i = j - 1;
  155.                 Info temp = new Info()
  156.                 {
  157.                     key = initialArray[j].key,
  158.                     text = initialArray[j].text
  159.                 };
  160.                 do
  161.                 {
  162.                     if (temp.key >= initialArray[i].key)
  163.                     {
  164.                         initialArray[i + 1] = temp;
  165.                         break;
  166.                     }
  167.                     else
  168.                     {
  169.                         initialArray[i + 1] = initialArray[i];
  170.                         i--;
  171.                     }
  172.                     //PrintAll();
  173.                     //Console.WriteLine(temp.key + " - " + temp.text);
  174.                 } while (i > -1);
  175.                 if (i == -1)
  176.                 {
  177.                     initialArray[0] = temp;
  178.                 }
  179.                 //PrintAll();
  180.                 //Console.WriteLine(temp.key + " - " + temp.text);
  181.                 //Console.WriteLine();
  182.             }
  183.         }
  184.     }
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement