Сортировка Хоара (1962 г.)
Это, по-видимому, наиболее популярный в мире метод внутренней сортировки. Установим указатели i и j на начало и конец таблицы. После сравнения ключей ti, tj изменяется один из индексов – i или j(увеличивается iили уменьшается j). Первым изменяется j. Если ti > tj, ключи меняются местами, то переключаемся на изменение противоположного указателя. Процесс продолжается до тех пор, пока указатели не "встретятся". Пример выполнения
Рис. 37 Сортировка Хоара
процесса изображен на рис.37. Заметим, что ключ 7 участвовал во всех сравнениях. Все ключи слева от него меньше его, все ключи справа – больше его, а сам ключ 7 занял свое окончательное положение. Рассмотренный процесс назовем разделением. Теперь можно применить тот же самый процесс к левой и правой части разделенной таблицы.
int Partition(int m, int n, int t[]){
// функция выполняет разделение участка массива ключей
// от m до n, возвращает точку расщепления
bool b=true; // если b==true, то перемещается правый указатель
// в противном случае - левый
while(m<n){
if(t[m]>t[n]){
swap(t[m],t[n]);
b=!b; // переключаемся на изменение другого указателя
}
if(b){
N--;
} else {
m++;
}
}
Дата добавления: 2014-12-02; просмотров: 758;