Реализация сортировки выбором

Я играю с алгоритмами сортировки. Реализация сортировки выбора у меня следующая:

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

Что, очевидно, не совсем правильно. Я не совсем уверен, что не так с реализацией, которая у меня есть. Как мне это исправить?


person Fiery Phoenix    schedule 17.02.2016    source источник
comment
Простите меня, если я ошибаюсь, поскольку я давно не занимался алгоритмами сортировки, но если бы мне пришлось угадывать, что вы запускаете элементы в массиве фиксированное количество раз. Разве вам не придется продолжать его работу, пока вы не внесете никаких изменений?   -  person Matt    schedule 17.02.2016
comment
Слишком широко... Отладка. Шаг через код. Добавьте модульные тесты. С практической точки зрения - удалить все и использовать OrderBy или любую другую встроенную сортировку.   -  person Alexei Levenkov    schedule 17.02.2016


Ответы (2)


Просто выньте часть подкачки из цикла.

person user4034932    schedule 17.02.2016
comment
Под этим я подразумеваю внутреннюю петлю. - person user4034932; 17.02.2016
comment
Вау, спасибо! Я пробовал почти все, но это никогда не приходило мне в голову. Я предположил, что это будет похоже на пузырьковую сортировку, где обмен происходит во втором цикле. - person Fiery Phoenix; 17.02.2016

person    schedule
comment
Вы можете дать больше объяснений? - person Muhammad Dyas Yaskur; 01.01.2020