Сортировка выбором, не работает код, в чем причина

242
13 апреля 2018, 16:56

Есть одномерный массив, который сортирую методом выбора, необходимо пользователю показывать каждую итерацию (чтобы он видел изменения в массиве), но вот если элементы попалась такие что достаточно 2 итераций для их сортировки, как остановить показ?

void sortirovka(int *a, int n) //функция сортировки массива
{
    int count = 0;
    for(int i = 0; i < n; i++)
    {
        bool flag = true;
        int temp = a[0];
        for(int j = i + 1; j < n; j++)
        {
            if(a[i] < a[j])
            {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
                flag = false;
            }
        }
        if(!flag)
        {
            count ++;
            cout << "\n" << count << " перестановка:  ";
            for (int k = 0; k < n; k++)
            {             
                cout << a[k] << " ";
            }
        }
    }
}
Answer 1

Сортировка выбором предпологает вставку минимального элемента в начало последовательности. Это очень плохой метод сортировки, но все же вы написали его неправильно, поэтому я напишу как надо, чтоб на правильном коде показать как и когда нужно вывести массив на показ после каждой итерации:

void selection_sort(int* array, size_t n)
{
    for (size_t i = 0;  i < n - 1; ++i) {
        size_t min = i;
        for (size_t j = i + 1; j < n; ++j) {
            if (array[j] < array[min]) {
                min = j;
            }
        }
        if (min != i)
            swap(array[i], array[min]);
        //меньший элемент на своем месте, показываем результат
        for (size_t k = 0; k < n; ++k) {
            cout << array[k] <<' ';
        }
        cout << endl;
    }
}
READ ALSO
Как перехватить исключение

Как перехватить исключение

Почему данный код не ловит исключение?

270
Инициализация односвязного списка

Инициализация односвязного списка

Создание новой связки *begin = new List; в начале проги убрать, это нужно делать в цикле, где условие if(start==NULL)Первым действием в цикле нужно создать...

267
как передавать путь к файлу?

как передавать путь к файлу?

У меня проблемаМне нужно в мою програму передавать путь к файлу, который нужно считать

229
Увеличение переменной внутри цикла

Увеличение переменной внутри цикла

Подскажите, пожалуйста, как мне сделать, чтобы при каждой итерации j значение переменной k увеличивалось на 5? То бишь когда j=2, то k=5, а когда...

228