NickAndNick

Сортировка массива по возрастанию модулей разности соседей

Nov 18th, 2012
94
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2.  
  3. namespace example
  4. {
  5.     class Program
  6.     {
  7.         public static void Main(string[] args)
  8.         {
  9.             int[] arr = { 12, 0, 5, 7, 6, -11, -2, -30, 8, 7 };
  10.  
  11.             ShowArray(arr);
  12.             SortAbs(arr);    
  13.             ShowArray(arr);
  14.  
  15.             Console.ReadKey();
  16.         }
  17.  
  18.         public static void ShowArray(int[] arr)
  19.         {
  20.             foreach (var a in arr) Console.Write(a + " ");
  21.             Console.WriteLine();
  22.         }
  23.  
  24.         public static void SortAbs(int[] arr)
  25.         {
  26.             int size = arr.Length;          
  27.             int last = LastElement(arr);
  28.             int temp;
  29.             int next;
  30.  
  31.             if (arr[size - 1] != last)
  32.             {
  33.                 for (int k = 0; k < size; k++)
  34.                 {
  35.                     if (arr[k] == last)
  36.                     {
  37.                         temp = arr[size - 1];
  38.                         arr[size - 1] = arr[k];
  39.                         arr[k] = temp;
  40.                         break;
  41.                     }
  42.                 }
  43.             }
  44.            
  45.             for (int n = size - 2; n >= 0; n--)
  46.             {
  47.                 next = NextElement(arr, n);
  48.  
  49.                 if (arr[n] != next)
  50.                 {
  51.                     for (int t = 0; t < size; t++)
  52.                     {
  53.                         if (arr[t] == next)
  54.                         {
  55.                             temp = arr[n];
  56.                             arr[n] = arr[t];
  57.                             arr[t] = temp;
  58.                             break;
  59.                         }
  60.                     }
  61.                 }
  62.             }
  63.         }
  64.  
  65.         public static int NextElement(int[] arr, int stopIndex)
  66.         {      
  67.             int max = 0;
  68.             int temp;
  69.             int next = arr[stopIndex];
  70.  
  71.             for (int n = stopIndex; n >= 0; n--)
  72.             {
  73.                 temp = Math.Abs(arr[n] - arr[stopIndex + 1]);
  74.  
  75.                 if (temp > max)
  76.                 {
  77.                     max = temp;
  78.                     next = arr[n];
  79.                 }
  80.  
  81.                 if (temp == Int32.MaxValue) break;
  82.             }
  83.  
  84.             return next;
  85.         }
  86.  
  87.         public static int LastElement(int[] arr)
  88.         {
  89.             int max = 0;
  90.             int temp;
  91.             int size = arr.Length;
  92.             bool flag = false;
  93.             int last = arr[size - 1];
  94.  
  95.             for (int n = 0; n < size; n++)
  96.             {
  97.                 for (int m = 0; m < size; m++)
  98.                 {
  99.                     if (n == m) continue;
  100.  
  101.                     temp = Math.Abs(arr[m] - arr[n]);
  102.  
  103.                     if (temp > max)
  104.                     {
  105.                         max = temp;
  106.                         last = arr[m];
  107.                     }
  108.  
  109.                     if (temp == Int32.MaxValue)
  110.                     {
  111.                         flag = true;
  112.                         break;
  113.                     }
  114.                 }
  115.                 if (flag) break;
  116.             }
  117.  
  118.             return last;
  119.         }
  120.     }
  121. }
RAW Paste Data