Жиым элементтері екіге – бастапқы тізбекке және дайын тізбекке бөлінеді.
Әрбір адымда I=2 нөмірінен бастап, бастапқы берілген тізбектен I-ші элемент алынады да, ол дайын тізбектің керекті жеріне орналастырылады. Мұнан кейін I-ге 1 қосылады да, сол әрекеттер қайталанады.
Керекті орынды іздеу кезінде оң жақтағы келесі элементпен орын ауыстыру қарастырылады, яғни таңдалып алынған элемент сұрыпталғандардың J=I-1 нөмірінен басталатын кезекті элементімен салыстырылады. Егер таңдалып алынған элемент a[I]-ден артық болса, онда ол сұрыпталғандар ішіне қосылады, әйтпесе a[J] бір орынға ығысады да, таңдалған элемент сұрыпталғандар ішіндегі келесі элементпен салыстырылады. Керекті орынды іздеу әрекеті екі жағдайда:
int i,j,x; for(i=1;i
{ x=a[i];//ауысатын элементті есте сақтау
j=i-1;
while(x=0) //керекті орынды іздеу
{
a[j+1]=a[j]$ //оңға жылжыту
j--;
}
a[j+1]=x;//элементті кірістіріп қою
}
Жай алмастыру арқылы сұрыптау
Мұнда ең соңғыдан бастап, екі элемент салыстырылады да, қажет болса, орындары алмастырылады. Осындай әрекет нәтижесінде ең кіші элемент жиымның ең сол жақ шетіне ығысады. Қалған жиым элементтері үшін де осы процесс қайталанады.
for(int i=1;i=i;j--)
if(a[j]{int r=a[j];a[j]=a[j-1];a[j-1]=r;}
Мысал: Бүтін сандардан тұратын А10 жиымы берілген. Сол жиымның ең үлкен элементін – максимумын және оның индексін анықтау керек.
/* Жиым максимумын табу */
#include #include #define n 10 main() {
int i,t,a[n]={6,5,9,8,7,4,1,2,3,0},max;
textcolor(BLUE); textbackground(YELLOW); clrscr();
printf("a[10] элементтерi : ");
for(i=0; i
printf(" %d ",a[i]);
max=a[0]; t=0; // max - максимум, t - оның индекci
for(i=1; i
if (a[i] > max) {
max = a[i]; t=i;}
printf("\nmax = %d, индексi = %d\n", max, t); getch();
}
Достарыңызбен бөлісу: |