Skip to content

07.12.2011

Сортировка слиянием

Покорилась и она, метод научного тыка работает =), код некрасивый и корявый, но зато он сливает)

 

static int[] Merge(int[] x1, int[] x2) // слияние 2 упорядоченных массивов
        {
            int[] result = new int[x1.Length+x2.Length];
            int ix1 = 0, ix2 = 0;
            for (int i = 0; i < result.Length;++i ){
                if (x1[ix1] < x2[ix2])
                {
                    result[i] = x1[ix1++];
                    if (ix1 == x1.Length)
                    {
                        i++;
                        for (; ix2 < x2.Length; ++ix2, ++i)
                        {
                            result[i] = x2[ix2];
                        }
                    }
                }
                else
                {
                    result[i] = x2[ix2++];
                    if (ix2 == x2.Length)
                    {
                        i++;
                        for (; ix1 < x1.Length; ++ix1, ++i)
                        {
                            result[i] = x1[ix1];
                        }
                    }
                }
            }
            return result;
        }
        static void MergeSort(ref int[] x) 
        {
            int middle = x.Length / 2;
            int dl = 1;
            while(dl<x.Length)
            {
                int[] a = new int[middle];
                int[] b = new int[x.Length-middle];
                for (int i = 0; i < middle; ++i)
                {
                    a[i] = x[i];
                }
                for (int i = 0; i < b.Length; ++i)
                {
                    b[i] = x[middle+i];
                }
                MergeSort(ref a);
                MergeSort(ref b);
                x = Merge(a, b);
                dl *= 2;
            }
        }
        static void Main(string[] args)
        {
            int[] x = { -10, 4, 25, 11, -7, 0, 3, 12, 51, 100 };
           // int[] y = { 30, 50, 70, 90, 100 };
            //int[] z = Merge(x,y);
             MergeSort(ref x);
        }

Share your thoughts, post a comment.

(required)
(required)

Note: HTML is allowed. Your email address will never be published.

Subscribe to comments