【问题标题】:Selection sort method does not do anything C#选择排序方法不做任何事情 C#
【发布时间】:2020-07-26 01:20:41
【问题描述】:

我正在尝试使用具有交换方法的已实现数据数组类来使选择排序算法工作。问题是当我尝试运行代码以查看它是否有效时,输出中没有任何变化,我对为什么会这样感到非常困惑。数字是每次随机生成的

public static void SelectionSort(DataArray items)
        {
            int index = 0;
            double minValue = 0;
            for(int i = 0; i < items.Length - 1; i++)
            {
                index = i;

                minValue = items[i];

                for(int j = i + 1; j < items.Length; j++)
                {

                    if(minValue > items[j])
                    {                    
                        minValue = items[j];                     
                        index = j;
                    }
                }

                items.Swap(i, index, items[i], minValue);              

            }

我的交换方法

   class MyDataArray:DataArray
    {
        double[] data;
        public MyDataArray(int n, int seed)

        {
            data = new double[n];
            length = n;
            Random rand = new Random(seed);
            for
           (int i = 0; i < length; i++)

            {
                data[i] = rand.NextDouble();

            }

        }

        public MyDataArray(int n)
        {
            data = new double[n];
            length = n;
        }
        public override double this[int index]
        {
            get { return data[index]; }

        }
        public override void Swap(int i, int j, double a, double b)
        {
            data[i] = a;
            data[j] = b;
        }

    }
}

数据数组类

abstract class DataArray
    {
        public int length;
        public int Length { get { return length; } }
        public abstract double this[int index] { get; }
        public abstract void Swap(int i, int j, double a, double b);
        public void Print(int n)
        {
            for (int i = 0; i < n; i++)
                Console.Write(" {0:F3} ", this[i]);
            Console.WriteLine();
        }

    }

当我尝试使用这种方法运行代码时

    public static void Test_Array_List(int seed)
    {
        int n = 12;
        MyDataArray myarray = new MyDataArray(n, seed);
        Console.WriteLine("Before sorting");
        myarray.Print(n);
        Console.WriteLine("After sorting");
        SelectionSort(myarray);
        myarray.Print(n);

    }

我得到这个结果没有任何变化,我不知道为什么

Before sorting
 0.216  0.578  0.831  0.898  0.653  0.496  0.380  0.567  0.230  0.611  0.091  0.076
After sorting
 0.216  0.578  0.831  0.898  0.653  0.496  0.380  0.567  0.230  0.611  0.091  0.076
Press any key to continue . . 

在此感谢您

【问题讨论】:

    标签: c# selection-sort


    【解决方案1】:

    您应该学习使用调试器来诊断这些类型的问题。逐行运行程序,检查函数的变量和输出,看看哪些地方没有按预期工作。

    也就是说,我怀疑您对Swap 的使用不正确,因为您将ij 的值按此顺序传回给它,所以它并没有真正交换任何东西。您可以通过仅传递索引来避免此类错误:

    public override void Swap(int i, int j)
    {
        var temp = data[i];
        data[i] = data[j];
        data[j] = temp;
    }
    

    【讨论】:

    • 是的,你是对的。您发布的答案是正确的,而且您对我还不知道如何正确调试问题这一事实也是正确的,这使这个问题变得比实际困难得多。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 2020-10-14
    相关资源
    最近更新 更多