选择排序实施

时间:2016-02-17 03:19:57

标签: c# sorting selection-sort

我正在玩排序算法。我对选择排序的实现如下:

using System;

namespace Sort
{
    class Program
    {    
        static void SelectionSort(int[] arr)
        {
            int smallestIndex, index, minIndex, temp; 
            for (index = 0; index < arr.Length - 1; index++)
            {
                smallestIndex = index; 
                for (minIndex = index; minIndex < arr.Length; minIndex++)
                {
                    if (arr[minIndex] < arr[smallestIndex])
                        smallestIndex = minIndex;
                    temp = arr[smallestIndex];
                    arr[smallestIndex] = arr[index];
                    arr[index] = temp; 
                }
            }
        }

        static void Main(string[] args)
        {
            int[] myList = {18, 16, 3, 90, 22, 10, 18, 7, 0, 43, 72, 98, 5, 44};
            string unsorted = "";
            string sorted = ""; 
            // First, display the contents of the unsorted list.
            foreach (var item in myList)
            {
                unsorted = unsorted + item.ToString() + " "; 
            }
            Console.WriteLine("- Original list: " + unsorted);
            // Now, sort and display the contents of the list after sorting. 
            SelectionSort(myList); 
            foreach (var item in myList)
            {
                sorted = sorted + item.ToString() + " "; 
            }
            Console.WriteLine("- Sorted list: " + sorted); 
            Console.WriteLine("- List Size " + myList.Length); 
        }
    }
}

这会产生以下输出:

- Original list: 18 16 3 90 22 10 18 7 0 43 72 98 5 44
- Sorted list: 7 3 10 16 18 18 22 43 0 44 5 72 90 98
- List Size 14

显然,这是不对的。我不确定我的实施方式有什么问题。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

只需将交换部分取出循环。

答案 1 :(得分:0)

The second for is followed by parentheses and must be restricted.

    static int [] Selectsort(int [] dizi)
      {

              int smallestIndex, index, minIndex, temp; 

        for (index = 0; index < dizi.Length - 1; index++)
        {
            smallestIndex = index;

            for (minIndex = index; minIndex < dizi.Length; minIndex++)
            {
                if (dizi[minIndex] < dizi[smallestIndex])
                {
                    smallestIndex = minIndex;
                }
            }
            temp = dizi[smallestIndex];
                dizi[smallestIndex] = dizi[index];
                dizi[index] = temp; 

        }

        return dizi;
    }

答案 2 :(得分:0)

public static class SelectionSort
{
    static int min;
    public static void Sort(int[] data)
    {
        for (int i = 0; i < data.Length; i++)
        {
            for (int j = 0; j < data.Length; j++)
            {
                min = j;
                if (data[i] < data[j])
                    Swap(x: ref data[i], y: ref data[min]);
            }
        }
    }

    private static void Swap(ref int x, ref int y)
    {
        x = x + y;
        y = x - y;
        x = x - y;
    }
}