0

我目前正在构建一个排序程序。我已经做了三种不同的方法来创建一个数组RandomIn OrderReverse。我目前遇到了In OrderReverse数组的问题。每次In Order创建数组时,它都以 a 开头1,我不知道为什么会这样做。此外,我的Reverse数组不会每次都显示乱序的数字,而是在单击后显示。我该如何解决这两个问题?

namespace sortingMachine
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //Class Level Variables --------------------------------------------------------------------------------------

        Stopwatch sw = new Stopwatch();
        Random r = new Random();
        OpenFileDialog open1 = new OpenFileDialog();

        long operations = 0;
        int size;
        int max;
        int[] createArray;
        int[] sortArray;
        int[] copyArray;

        //Create Array Methods --------------------------------------------------------------------------------------

        public void RandomNumber()
        {
            size = Convert.ToInt32(textBoxSize.Text);
            max = Convert.ToInt32(textBoxMax.Text);
            createArray = new int[size];
            copyArray = new int[size];
            sortArray = new int[size];

            for (int i = 0; i < size; i++)
            {
                createArray[i] = r.Next(1, max);
            }

            textBoxResults.AppendText("-------------------------------------------------------------------------------" + Environment.NewLine + "Random" + Environment.NewLine + Environment.NewLine);

            DisplayArrays();
        }

        public void InOrder()
        {
            size = Convert.ToInt32(textBoxSize.Text);
            max = Convert.ToInt32(textBoxMax.Text);
            createArray = new int[size];
            copyArray = new int[size];
            sortArray = new int[size];

            createArray[0] = 1;

            for (int i = 1; i < size; i++)
            {
                createArray[i] = createArray[i - 1] + r.Next(1, max);
            }

            for (int i = 1; i < size; i++)
            {
                if (r.Next(1, 101) < Convert.ToInt32(textBoxPercentage.Text))
                {
                    for (int x = 1; x < size; x++)
                    {
                        createArray[x] = r.Next(1, createArray[size - 1]);
                    }
                }
            }

            textBoxResults.AppendText("-------------------------------------------------------------------------------" + Environment.NewLine + "In Order" + Environment.NewLine + Environment.NewLine);

            DisplayArrays();
        }

        public void ReverseOrder()
        {
            size = Convert.ToInt32(textBoxSize.Text);
            max = Convert.ToInt32(textBoxMax.Text);
            createArray = new int[size];
            copyArray = new int[size];
            sortArray = new int[size];

            createArray[size - 1] = 1;

            for (int i = size - 1; i > 0; i--)
            {
                createArray[i - 1] = createArray[i] + r.Next(1, max);
            }

            for (int i = size - 1; i > 0; i--)
            {
                if (r.Next(1, 101) < createArray[0])
                {
                    for (int x = size - 1; x > 0; x--)
                    {
                        createArray[x] = r.Next(1, createArray[0]);
                    }
                }
            }

            textBoxResults.AppendText("-------------------------------------------------------------------------------" + Environment.NewLine + "Reverse Order" + Environment.NewLine + Environment.NewLine);

            DisplayArrays();
        }



        private void buttonCreateArray_Click(object sender, EventArgs e)
        {

            if ((textBoxSortKey.Text != "") && (textBoxCreateKey.Text != ""))
            {
                if (radioButtonRandom.Checked == true)
                {
                    RandomNumber();
                }

                if (radioButtonInOrder.Checked == true)
                {
                    InOrder();
                }

                if (radioButtonReverseOrder.Checked == true)
                {
                    ReverseOrder();
                }
            }
            else
            {
                MessageBox.Show("Type a key into the Key textbox.");
            }
        }



    }
}

显示结果:

订单数组我不确定为什么它总是以一个开头:

-------------------------------------------------------------------------------
In Order
1
2
4
6
10

有时逆序数组会是这样的:

-------------------------------------------------------------------------------

    Reverse Order
    10
    2
    7
    6
    5

窗体:

在此处输入图像描述

4

2 回答 2

2

如果您查看如何为数组分配值,您会发现第一个元素被分配为零,但在您的循环中,您从第二个元素(即1)开始,因此您永远不会重新分配第一个元素。

        createArray[0] = 1;

        for (int i = 1; i < size; i++)
        {
            createArray[i] = createArray[i - 1] + r.Next(1, max);
        }

尝试像这样编写第一个元素分配:

        createArray[0] = r.Next(1, max);

至于您的反向功能,那里有太多的怪异之处,无法真正看到您要做什么。试着多思考几次。尤其要小心这样的代码:if (r.Next(1, 101) < createArray[0])- 它有随机行为和幻数。

于 2012-11-23T22:55:27.990 回答
1

在函数 InOrder 中,您将数组的第一个索引初始化为 1。至于反向顺序,在两个 fors 之间的if语句中,每次将 1-101 之间的随机数与数组中的第一个数字进行比较. 相反,您应该做的是将数组中的数字相互比较。

于 2012-11-23T22:42:46.047 回答