Линейный выбор с подсчетом

 

Для сортировки элементов исходного вектора А размерности n, нужно сформировать вектор счетчиков S размерности n, каждый элемент которого будет показывать, в какой позиции должен стоять соответствующий элемент вектора А в упорядоченном списке.

На первом этапе в вектор счетчиков заносятся единицы. Для формирования вектора счетчиков нужно n-1 раз просмотреть элементы исходного вектора A.

При первом просмотре для первого элемента вектора A подсчитывается количество меньших элементов во всем векторе и это количество заносится в счетчик первого элемента, в счетчики элементов, больших первого, добавляются единицы.

При втором просмотре первый элемент вектора A исключается из рассмотрения и для второго элемента в оставшемся векторе подсчитывается количество меньших элементов (это количество заносится в счетчик второго элемента), в счетчики больших элементов добавляются единицы, и.т.д.

Перемещая элементы исходного вектора A в полученный вектор B в соответствии со значениями вектора счетчиков S, получим упорядоченный исходный вектор B.

Просмотр Исходный вектор А Вектор счетчиков S
1-ый 2 4 8 5 6 1 1 1 1 1 1 1 + 1 1 1 1 1 2 2 2 2 2 1
2-ой 2 4 8 5 6 1 2 2 2 2 2 1 + 1 1 1 1 2 3 3 3 3 1
3-ий 2 4 8 5 6 1 2 3 3 3 3 1 + 3 2 3 6 3 3 1
4-ый 2 4 8 5 6 1 2 3 6 3 3 1 + 1 1 2 3 6 4 4 1
5-ый 2 4 8 5 6 1 2 3 6 4 4 1 + 1 2 3 6 4 5 1

 

Таким образом, сформированный вектора счетчиков показывает, что первый элемент вектора A должен стоять в упорядоченном списке на втором месте, второй элемент вектора A – на третьем, третий элемент – на последнем и т.д.

For i:=1 to n do {инициируем вектор счетчика}

S[i]:=1;

For i:=1 to n-1 do {формируем вектора счетчика}

Begin

k:=0; {количество меньших элементов для i-го элемента}

For j:=i+1 to n do

If A[i]<A[j] then S[j]:=S[j]+1

{в счетчики больших элементов добавляем единицы}

else k:=k+1;

S[i]:=S[i]+k;

end;

{формируем вектор B в соответствии со значениями вектора счетчика}

For i:=1 to n do

Begin

r:=S[i];

B[r]:=A[i];

end;








Дата добавления: 2015-04-15; просмотров: 1840;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.