C#简单选择排序

时间:2017-03-07 22:47:24

标签: c# selection-sort

我试图对数组进行选择排序。但由于某种原因,它不会排序。我的代码:

public static void SelectionSort(DataArray ar)
    {
        int n = ar.Length;
        for (int x = 0; x < n; x++)
        {
            int min_index = x;
            for (int y = x; y < n; y++)
            {
                if (ar[min_index] > ar[y])
                {
                    min_index = y;
                }
                ar.Swap(y, ar[x], ar[min_index]);
            }
        }
    }

感谢您的任何想法和帮助。

我的交换代码如下所示

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

3 个答案:

答案 0 :(得分:0)

你有正确的想法,除非有一些小问题。我没有编译,但这应该工作。

public static void SelectionSort(DataArray ar)
{
    int n = ar.Length;
    for (int x = 0; x < n-1; x++)
    {
        int min_index = x;
        for (int y = x+1; y < n; y++)
        {
            if (ar[min_index] > ar[y])
            {
                min_index = y;
            }
            ar.Swap(y, ar[x], ar[min_index]);
        }
    }
}

答案 1 :(得分:0)

class Program
{
    static void Main(string[] args)
    {
        int[] arrayData = { 10,25,33,45,88,99,22,11,66,44,23};
        for(int i = 0; i < arrayData.Length - 1; i++)
        {
            int minValue = i;
            for(int j = i + 1; j < arrayData.Length; j++)
            {
                if (arrayData[j] < arrayData[minValue])
                {
                    minValue = j;
                }

            }
            /*Swap Code*/
            int tempData = arrayData[minValue];
            arrayData[minValue] = arrayData[i];
            arrayData[i] = tempData;
        }

        /*Print Code*/
        for(int i = 0; i < arrayData.Length; i++)
        {
            Console.Write(arrayData[i]+"\t");
        }
        Console.ReadLine();
    }
}

答案 2 :(得分:-2)

使用linq:

 var SortedArray = ar.OrderBy(o => o.Index).ToArray();