选择排序方法不执行任何操作 C#

Selection sort method does not do anything C#

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

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;
        }

    }
}

数据数组class

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 . . 

先谢谢你

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

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

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