Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 二进制排序逻辑:未正确排序数字_C# - Fatal编程技术网

C# 二进制排序逻辑:未正确排序数字

C# 二进制排序逻辑:未正确排序数字,c#,C#,我目前正在尝试实现二进制排序逻辑。我从生成随机数开始。然后创建该数组的副本,然后使用二进制排序方法对其进行排序。问题是这类机器不能正常工作。我不确定我的比较是否正确。你知道为什么分类不正确吗 namespace binarySort { public partial class Form1 : Form { public Form1() { InitializeComponent(); }

我目前正在尝试实现二进制排序逻辑。我从生成随机数开始。然后创建该数组的副本,然后使用二进制排序方法对其进行排序。问题是这类机器不能正常工作。我不确定我的比较是否正确。你知道为什么分类不正确吗

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

        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;


 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 BinarySort()
        {
            operations = 0;
            sw.Reset();
            sw.Start();

            int low = 0;
            int high = 0;
            int temp = 0;
            int mid = 0;

            for (int i = 0; i < size; i++)
            {
                copyArray[i] = createArray[i];
            }

            for (int i = 1; i < size; i++)
            {
                high = i - 1;
                temp = copyArray[i];

                while (low <= high)
                {
                    operations++;

                    mid = (low + high) / 2;

                    if (temp < copyArray[mid])
                    {
                        high = mid - 1;
                    }
                    else
                    {
                        low = mid + 1;
                    }
                }

                operations++;

                for (int j = i - 1; j >= low; j--)
                {
                    copyArray[j + 1] = copyArray[j];
                }

                copyArray[low] = temp;
            }

            for (int i = 0; i < size; i++)
            {
                sortArray[i] = copyArray[i];
            }

            textBoxResults.AppendText("-------------------------------------------------------------------------------" + Environment.NewLine + "Binary Insertion" + Environment.NewLine + Environment.NewLine);
            DisplaySorted();

        }

 private void buttonSortArray_Click(object sender, EventArgs e)
        {

    BinarySort();

    }

}

}
名称空间二进制排序
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
秒表sw=新秒表();
随机r=新随机();
OpenFileDialog open1=新建OpenFileDialog();
长操作=0;
整数大小;
int max;
int[]创建数组;
int[]sortArray;
int[]复制数组;
公共编号()
{
size=Convert.ToInt32(textBoxSize.Text);
max=转换为32(textBoxMax.Text);
createArray=newint[size];
copyArray=新整数[大小];
SORTARAY=新整数[大小];
对于(int i=0;i
例如:


编辑:对不起,您的原始代码还可以,您只需添加此行
low=0之后<代码>高=i-1应该是这样的

for (int i = 1; i < size; i++)
 {
        high = i - 1;
        low = 0;
        temp = copyArray[i];
for(int i=1;i
当您单步执行代码时,数组在哪一点首先包含错误的结果?在进行更改后,您建议我现在得到此错误:
附加信息:索引超出了数组的边界。
这很完美,您已经修复了它!谢谢。