Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
esepter&teoria.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
13.77 Mб
Скачать

23.Newman_sort және оның ерекшеліктері.

Тоғыстырып сұрыптау. Шапшаң сұрыптау алгоритмдердің тағы бір өкілі – тоғыстырып сұрыптайтын алгоритмді атауға болады. Ондай алгоритмдер жеткілікті дәрежеде жоғары шапшаңдықты , алайда бір ерекшелігі қосымша О (n) –ға жуық жад ұяшықтарын талап етеді. Тоғыстырып сұрыптайтын алгоритмдер екі реттелген массивті тоғыстыру алгоритмдерінен туындаған, сондықтан алдымен осы алгоритмнің идеясын қарастырған жөн болады. Екі реттелген массив берілсін. А массивінің өлшемі n болсын, B массивінің өлшемі m-ге тең болсын.Осы екі массивті тоғыстырайық. Тоғысқанда сұрыпталған массивті түзуіміз қажет. Тоғысқан массивті С деп белгілейік, өлшемі n+m тең. С массивінің элементтерін с= min (a,b), мұнда а А, b B ережесімен тағайындайық. Егер А мен B массивінің өлшемі екіншісінен көп болса, онда калдық элементтер С массивінің бос ұяшықтарына жазылуы тиіс. Бұл алгоритмнің орташа салыстыру саны min (n,m)+1 мәніне жақын болады.Алгоритмнің программалық нұсқасын көрсетейік.

Procedure merge ( a,m,b,n,c);

Begin i:=1; j:=1;

For k:=1 to n+m do

Begin if i>n then goto N;

If j>m then goto M;

If a[i]<b[j] then

M: begin c[k]:=a[i]; i:=i+1; end

Else

N: begin c[k]:=b[j]; j:=j+1; end

End

End

Итерациялы тоғыстырып сұрыптау. N өлшемді массивті өлшемі 1-ге тең n ішкі массивке бөледі, бөлінген массивтер бірінші этапта өлшемі 2-ге тең реттелген массив құрып тоғысады. Қалған этаптарды осылайша жалғастырып, нәтижесінде тоғыстырылып сұрыпталған n өлшемді массив құрады. Массивті сұрыптауға кеткен этаптар саны [ log,n]+1 тең. Егер әр этапта n-нен артық емес салыстыру қажет болса, онда массивті сұрыптауға қажет салыстыру мен алмастыру саны nxlog2n тең болады. Бұл баға элементтерді жұптап салыстыруға негізделген процедуралар үшін теориялық күрделіліктің төменгі шегі болып табылады.

Итерациялық тоғыстырып сұрыптау алгоритмдерін алмастыру санын кеміту арқылы шапшаңдатуға болады,яғни берілген массивте алгоритмнің жұмысы басталмай тұрып сұрыпталған ішкі массивтер болуы және тіпті оларың кейбіреулері бір элементтен ғана тұруы мүмкін. Мұндай жағдайда сұрыпталған бөліктердің өлшемдері үлкендерін тоғыстыра отырып процедураны шапшаңдатуға болады. Newmansort алгоритмінің программалық нұсқасы:

Procedure Neumannsort ( a,b,n,z);

begin…

Procedure P ( a,b,n,k);

Begin

I:=1; k:=1; d:=1; j:=n; s:=n;

K:

L: if then go to if then Q else N;

If then go to M;

If a[i]<a[j] then

M: begin b[k]:=a[i]; i:=i+1;

If a[i]<a[i-1] then := true and else

N: begin b[k]:=a[j]; j:=j-1;

If a[j]<a[j+1] then :=true; end else

K:=k+d; go to if i≤j then L else R;

Q: r:=k; k:=s; s:=r; d:=-d; go to K;

R: end P;

A: P( a,b,n,k);

If k>n then z:=false

Else begin P ( b,a,n,k);

If k>n then z:=true

Else go to A; end;

End Newman sort

4,9,16,15,19,6,14,20,8,1 массивінің негізінде Newmansort процедурасын бейнелейтін мысал қосымша түсініктеме беруді қажет етпейді:

Мысал:

1-ші қадам 1,4,8,9,16,20,6,19,15,14

2-ші қадам 1,4,8,9,14,15,16,19,20,6

3-ші қадам 1,4,6,8,9,14,15,16,19,20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]