Сортировка посредством выбора

Упорядоченный список В' получается из В многократным применением выборки из В минимального элемента, удалением этого элемента из В и добавлением его в конец списка В', который первоначально должен быть пустым.

Например:

B=<20,10,8,-5,7>, B'=<> B=<20,10,8,7>, B'=<-5> B=<20,10,8>, B'=<-5,7> B=<20,10>, B'=<-5,7,8> B=<20>, B'=<-5,7,8,10> B=<>, B'=<-5,7,8,10,20> . Функция select упорядочивает массив s сортировкой посредством выбора.

/* сортировка методом выбора */ double *select( double *s, int m, int n) { int i,j; double c; for (i=m; is[j]) { c=s[i]; s[i]=s[j]; s[j]=c; } return(s); } Здесь, как и в предыдущем примере оба списка В и В' размещаются в разных частях массива s (см. рис.27). При сортировке посредством выбора требуется Q=(n-m)*(n-m) действий и не требуется дополнительной памяти.



Рис.27. Схема движения индексов при сортировке выбором.

Сортировка квадратичной выборкой. Исходный список В из N элементов делится на М подсписков В1,В2,...,Вm, где М равно квадратному корню из N, и в каждом В1 находится минимальный элемент G1. Наименьший элемент всего списка В определяется как минимальный элемент Gj в списке , и выбранный элемент Gj заменяется новым наименьшим из списка Bj. Количество действий, требуемое для сортировки квадратичной выборкой, несколько меньше, чем в предыдущих методах Q= N*N, но требуется дополнительная память для хранения списка G.