В этой статье рассмотрим один из методов сортировки, который называется — метод выбора. Будет приведен алгоритм и его реализация на языке Си.
На первом проходе цикла выбирается минимальный элемент из текущей последовательности и меняется местами с первым элементом последовательности. На следующей итерации цикла поиск минимального элемента осуществляется со второй позиции, после меняется местами найденный минимальный элемент со вторым в списке. Такую процедуру выполняем до конца массива, пока он весь не будет отсортирован.
При сортировке методом выбора среднее число сравнений пропорционально 0,5N², а число перестановок за всё время сортировки пропорционально числу N/2 (N — число элементов в последовательности).
Приведем реализацию алгоритма на языке программирования Си.
1 2 3 4 5 6 7 8 9 10 |
for (int i = 0; i < N; i++) { minPosition = i; for (int j = i + 1; j < N; j++) if (mass[minPosition] > mass[j]) minPosition = j; tmp = mass[minPosition]; mass[minPosition] = mass[i]; mass[i] = tmp; } |
N — число элементов в массиве, mass[] — массив элементов.
Напишем программу на языке Си, которая считывает с клавиатуры последовательность элементов, сортирует ее методом выбора, и выводит результат сортировки на экран.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#include <stdio.h> #include <malloc.h> int main() { int N; printf("Input N: "); scanf_s("%d", &N); int* mass; mass = (int *)malloc(N * sizeof(int)); printf("Input the array elements:\n"); for (int i = 0; i < N; i++) scanf_s("%d", &mass[i]); //сортировка методом выбора int minPosition, tmp; for (int i = 0; i < N; i++) { minPosition = i; for (int j = i + 1; j < N; j++) if (mass[minPosition] > mass[j]) minPosition = j; tmp = mass[minPosition]; mass[minPosition] = mass[i]; mass[i] = tmp; } printf("Sorted array:\n"); for (int i = 0; i < N; i++) printf("%d ", mass[i]); printf("\n"); free(mass); return 0; } |
Прокомментируем код. Считываем число N — количество элементов в массиве (строка 8), выделяем память под массив (строка 10), считываем элементы массива (строки 12-13), выполняем сортировку методом выбора (строки 17-26), выводим отсортированный массив на экран (29-30), освобождаем память, выделенную под массив (строка 32).
На рисунке представлена демонстрация работы программы.
Если хотите скачать исходник этой программы, написанный в Visual Studio, то нажмите на кнопку ниже.
Смотрите также:
Сортировка методом подсчета на Си
Поделиться в соц. сетях: