Advertisement
ivandrofly

Custom sort array even < odd

Feb 15th, 2021 (edited)
977
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.45 KB | None | 0 0
  1. // FOLLOW GITHUB: https://github.com/ivandrofly
  2.  
  3. namespace CustomSortArrayEvenOdd
  4. {
  5.     using System;
  6.  
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             int[] data = { 1, 2, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 9, 0, 0, 0, 10, 12, 27, 27, 20 };
  12.             //Sort(data);
  13.             SortRecursion(data, 0, data.Length - 1);
  14.             Print(data);
  15.             Console.ReadLine();
  16.         }
  17.  
  18.         // solution #1
  19.         private static void Sort(int[] data)
  20.         {
  21.             int evenIdx = data.Length - 1;
  22.             for (int i = 0; i < data.Length; i++)
  23.             {
  24.                 if (data[i] % 2 != 0 && i < evenIdx)
  25.                 {
  26.                     int oddIdx = i;
  27.                     while (data[evenIdx] % 2 != 0 && oddIdx < evenIdx)
  28.                     {
  29.                         evenIdx--;
  30.                     }
  31.  
  32.                     if (data[evenIdx] % 2 == 0)
  33.                     {
  34.                         Swap(data, evenIdx, oddIdx);
  35.                     }
  36.                 }
  37.             }
  38.  
  39.             BubbleSort(data, 0, evenIdx - 1);
  40.             BubbleSort(data, evenIdx, data.Length);
  41.         }
  42.  
  43.         // solution #2:
  44.  
  45.         private static void SortRecursion(int[] data, int oddFrom, int evenFrom)
  46.         {
  47.             int oddIdx = FindOdd(data, oddFrom, evenFrom);
  48.             int evenIdx = FindEven(data, oddIdx, evenFrom);
  49.  
  50.             if (oddIdx != -1 && evenIdx != -1)
  51.             {
  52.                 Swap(data, evenIdx, oddIdx);
  53.                 SortRecursion(data, oddIdx + 1, evenIdx - 1);
  54.             }
  55.         }
  56.  
  57.         private static int FindOdd(int[] data, int oddIdx, int evenIdx)
  58.         {
  59.             if (oddIdx == -1 || evenIdx == -1)
  60.             {
  61.                 return -1;
  62.             }
  63.             for (int i = oddIdx; i < evenIdx; i++)
  64.             {
  65.                 if (data[i] % 2 != 0)
  66.                 {
  67.                     return i;
  68.                 }
  69.             }
  70.             return -1;
  71.         }
  72.  
  73.         private static int FindEven(int[] data, int oddIdx, int evenIdx)
  74.         {
  75.             if (oddIdx == -1 || evenIdx == -1)
  76.             {
  77.                 return -1;
  78.             }
  79.             for (int i = evenIdx; i > oddIdx; i--)
  80.             {
  81.                 if (data[i] % 2 == 0)
  82.                 {
  83.                     return i;
  84.                 }
  85.             }
  86.  
  87.             return -1;
  88.         }
  89.  
  90.         private static void Print(int[] data)
  91.         {
  92.             for (int i = 0; i < data.Length; i++)
  93.             {
  94.                 if (i < data.Length - 1)
  95.                 {
  96.                     Console.Write(data[i] + ", ");
  97.                 }
  98.                 else
  99.                 {
  100.                     Console.Write(data[i]);
  101.                 }
  102.             }
  103.         }
  104.  
  105.         private static void Swap(int[] data, int i, int j)
  106.         {
  107.             int temp = data[i];
  108.             data[i] = data[j];
  109.             data[j] = temp;
  110.         }
  111.  
  112.         public static void BubbleSort(int[] data, int from, int to)
  113.         {
  114.             // [2,4,6,2,2,2,1,1,1,1,1,1]
  115.             for (int i = from; i < to; i++)
  116.             {
  117.                 for (int j = from; j < to - (i - from) - 1; j++) // -1 for the j+1 in comparision
  118.                 {
  119.                     if (data[j] > data[j + 1])
  120.                     {
  121.                         Swap(data, j, j + 1);
  122.                     }
  123.                 }
  124.             }
  125.         }
  126.     }
  127. }
  128.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement