两个数组合并排序

class Program
    {
        static void Main(string[] args)
        {
            int[] num1 = new int[] { 3, 5, 6, 7 };
            int[] num2 = new int[] { 1, 3, 7, 8 };

            int[] result1 = Sort1(num1, num2);
            int[] result2 = Sort2(num1, num2);
            int[] result3 = Sort3(num1, num2);
        }

        //有序无序数组都可以排列并组合
        //1. 先插入到一个数组里面.2. 然后排序
        public static int[] Sort1(int[] num1, int[] num2)
        {
            int[] num3 = new int[num1.Length + num2.Length];
            for (int i = 0; i < num1.Length; i++)
            {
                num3[i] = num1[i];
            }
            for (int i = 0; i < num2.Length; i++)
            {
                num3[num1.Length + i] = num2[i];
            }

            for (int i = 0; i < num3.Length; i++)
            {
                for (int j = i + 1; j < num3.Length; j++)
                {
                    if (num3[i] > num3[j])
                    {
                        int num = num3[i];
                        num3[i] = num3[j];
                        num3[j] = num;
                    }
                }
            }

            return num3;
        }

        //针对有序的两个数组
        //1. 两个数组同时比较,进行插入.当其中一个数组插入完毕.跳出循环.
        //2. 对剩下的一个数组里面的数进行插入.
        //2. 如果是无序的两个数组,分别排序再合并 
        public static int[] Sort2(int[] num1, int[] num2)
        {
            int[] num3 = new int[num1.Length + num2.Length];
            int i = 0;
            int j = 0;
            int k = 0;

            while (i < num1.Length && j < num2.Length)
            {
                if (num1[i] < num2[j])
                {
                    num3[k++] = num1[i++];
                }
                else if (num1[i] > num2[j])
                {
                    num3[k++] = num2[j++];
                }
                else
                {
                    num3[k++] = num1[i++];
                    num3[k++] = num2[j++];
                }
            }

            if (i == num1.Length)
            {
                while (j < num2.Length)
                    num3[k++] = num2[j++];
            }
            else if (j == num2.Length)
            {
                while (i < num1.Length)
                    num3[k++] = num1[i++];
            }

            return num3;
        }

        //List进行操作
        //1. 将两个数组的数插入到List中
        //2. 去除排序
        static int[] Sort3(int[] num1, int[] num2)
        {
            List<int> list1 = new List<int>();
            for (int i = 0; i < num1.Length; i++)
            {
                list1.Add(num1[i]);
            }

            for (int i = 0; i < num2.Length; i++)
            {
                if (!list1.Contains(num2[i]))
                {
                    list1.Add(num2[i]);
                }
            }

            list1.Sort();

            return list1.ToArray();
        }
View Code

 

posted @ 2015-10-28 16:14  Binyao  阅读(1504)  评论(0编辑  收藏  举报