C#程序问题[将两个大纲分成一个]

时间:2014-11-11 10:23:06

标签: c# arrays sorting

我需要将两个数组排成一个,但0000000在输出中间发生。有什么问题? 无法找到一个错误,它在泡沫排序? 这是代码

  

' ConsoleApplication5.vshost.exe' (CLR v4.0.30319:   ConsoleApplication5.vshost.exe):已加载   ' C:\的Windows \ Microsoft.Net \组件\ GAC_MSIL \ System.Data.DataSetExtensions \ v4.0_4.0.0.0__b77a5c561934e089 \ System.Data.DataSetExtensions.dll&#39 ;.   跳过加载符号。模块已优化并具有调试器选项   ' Just My Code'已启用。 ' ConsoleApplication5.vshost.exe' (CLR   v4.0.30319:ConsoleApplication5.vshost.exe):已加载   ' C:\的Windows \ Microsoft.Net \组件\ GAC_MSIL \ Microsoft.CSharp \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ Microsoft.CSharp.dll&#39 ;.   跳过加载符号。模块已优化并具有调试器选项   ' Just My Code'已启用。 ' ConsoleApplication5.vshost.exe' (CLR   v4.0.30319:ConsoleApplication5.vshost.exe):已加载   ' C:\的Windows \ Microsoft.Net \组件\ GAC_32 \ System.Data \ v4.0_4.0.0.0__b77a5c561934e089 \ System.Data.dll中&#39 ;.   跳过加载符号。模块已优化并具有调试器选项   ' Just My Code'已启用。 ' ConsoleApplication5.vshost.exe' (CLR   v4.0.30319:ConsoleApplication5.vshost.exe):已加载   ' C:\的Windows \ Microsoft.Net \组件\ GAC_MSIL \的System.Xml \ v4.0_4.0.0.0__b77a5c561934e089 \ system.xml.dll的&#39 ;.   跳过加载符号。模块已优化并具有调试器选项   ' Just My Code'已启用。 ' ConsoleApplication5.vshost.exe' (CLR   v4.0.30319:ConsoleApplication5.vshost.exe):已加载   ' C:\的Windows \ Microsoft.Net \组件\ GAC_MSIL \ mscorlib.resources \ v4.0_4.0.0.0_ru_b77a5c561934e089 \ mscorlib.resources.dll&#39 ;.   模块没有符号。线程0x1264已退出   代码259(0x103)。线程0xc4c已退出代码259(0x103)。   线程0xdc4已退出,代码为0(0x0)。线程0x16f4有   退出代码259(0x103)。 ' ConsoleApplication5.vshost.exe' (CLR   v4.0.30319:ConsoleApplication5.vshost.exe):已加载   ' c:\ users \ vas \ documents \ visual studio   2013 \项目\ ConsoleApplication5 \ ConsoleApplication5 \ BIN \调试\ ConsoleApplication5.exe&#39 ;.   符号已加载。该程序' [1112] ConsoleApplication5.vshost.exe:   程序跟踪'已退出代码0(0x0)。该计划' [1112]   ConsoleApplication5.vshost.exe'已退出代码-1073741510   (0xc000013a)。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array1 = new int[20];
            int[] array2 = new int[20];
            int[] array = new int[40];
            int k = 0;
            Random rnd = new Random();
            Console.WriteLine("Исходный массив №1:");
            for (int i = 0; i < 20; i++)
            {
                array1[i] = rnd.Next(-100, +100);
                Console.Write("{0} ", array1[i]);
            }
            Console.WriteLine();
            Console.WriteLine("Исходный массив №2:");
            for (int i = 0; i < 20; i++)
            {
                array2[i] = rnd.Next(-100, +100);
                Console.Write("{0} ", array2[i]);
            }
            Console.WriteLine();
            for (; k < 20; k++)
            {
                array[k] = array1[k];
            }
            for (; k > 20; k++)
            {
                array[k] = array2[k - 20];
            }

            Console.WriteLine("Отсортированный массив:");

            BubbleSort(ref array);
            for (int i = 0; i < 40; i++)
            {
                Console.Write("{0} ", array[i]);
            }
            Console.ReadKey();
        }
        static void BubbleSort(ref int[] A)
        {
            for (int i = 0; i < A.Length; i++)
            {
                for (int j = i + 1; j < A.Length; j++)
                {
                    if (A[j] < A[i])
                    {
                        var temp = A[i];
                        A[i] = A[j];
                        A[j] = temp;
                    }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

这应该是:

        for (int k = 0; k < 20; k++)
        {
            array[k] = array1[k];
        }
        for (int k = 0; k < 20; k++)
        {
            array[k + 20] = array2[k];
        }

你可以做到

        for (int k = 0; k < 20; k++)
        {
            array[k] = array1[k];
            array[k + 20] = array2[k];
        }

但由于内存管道缓存,2个循环通常更快。