Advertisement
gride29

quicksorrrtt

Nov 19th, 2020
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.64 KB | None | 0 0
  1. using System;
  2.  
  3. namespace zadanie2
  4. {
  5.     class Program
  6.     {
  7.         static int[] quickSort(string[] a, int start, int end)
  8.         {
  9.             int[] pomocnicza = new int[a.Length];
  10.             int[] wynik = new int[a.Length];
  11.             // index for the "left-to-right scan"
  12.             int i = start;
  13.             // index for the "right-to-left scan"
  14.             int j = end;
  15.             string[] kopia = new string[a.Length];
  16.             Array.Copy(a, kopia,a.Length);
  17.  
  18.             // only examine arrays of 2 or more elements.
  19.             if (j - i >= 1)
  20.             {
  21.                 // The pivot point of the sort method is arbitrarily set to the first element int the array.
  22.                 string pivot = a[i];
  23.                 // only scan between the two indexes, until they meet.
  24.                 while (j > i)
  25.                 {
  26.                     // from the left, if the current element is lexicographically less than the (original)
  27.                     // first element in the String array, move on. Stop advancing the counter when we reach
  28.                     // the right or an element that is lexicographically greater than the pivot String.
  29.                     while (a[i].CompareTo(pivot) <= 0 && i < end && j > i)
  30.                     {
  31.                         i++;
  32.                     }
  33.                     // from the right, if t he current element is lexicographically greater than the (original)
  34.                     // first element in the String array, move on. Stop advancing the counter when we reach
  35.                     // the left or an element that is lexicographically less than the pivot String.
  36.                     while (a[j].CompareTo(pivot) >= 0 && j > start && j >= i)
  37.                     {
  38.                         j--;
  39.                     }
  40.                     // check the two elements in the center, the last comparison before the scans cross.
  41.                     if (j > i)
  42.                         swap(a, i, j);
  43.                        
  44.                        
  45.                 }
  46.                 // At this point, the two scans have crossed each other in the center of the array and stop.
  47.                 // The left partition and right partition contain the right groups of numbers but are not
  48.                 // sorted themselves. The following recursive code sorts the left and right partitions.
  49.  
  50.                 // Swap the pivot point with the last element of the left partition.
  51.                 swap(a, start, j);
  52.                 // sort left partition
  53.                 quickSort(a, start, j - 1);
  54.                 // sort right partition
  55.                 quickSort(a, j + 1, end);
  56.             }
  57.            
  58.             for (int z = 0; z < a.Length; z++)
  59.             {
  60.                 if (a[z] == kopia[z])
  61.                 {
  62.                     pomocnicza[z] = z;
  63.                 }
  64.                 else if (a[z].CompareTo(kopia[z]) < 0)
  65.                 {
  66.                     pomocnicza[z] = z + 1;
  67.                 }
  68.                 else
  69.                 {
  70.                     pomocnicza[z] = z - 1;
  71.                 }
  72.             }
  73.             return pomocnicza;
  74.         }
  75.  
  76.         static void swap(string[] a, int i, int j)
  77.         {
  78.             string temp = a[i];
  79.             a[i] = a[j];
  80.             a[j] = temp;
  81.         }
  82.  
  83.  
  84.         static void Main(string[] args)
  85.         {
  86.             string[] tab = { "Adam", "Zenek", "Barbara" };
  87.             Console.WriteLine(String.Join(",", quickSort(tab, 0, tab.Length - 1)));
  88.             foreach (string slowo in tab)
  89.             {
  90.                 Console.WriteLine(slowo);
  91.             }
  92.             Console.ReadKey();
  93.         }
  94.     }
  95. }
  96.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement