Сортировка и поиск. Сортировка массивов. Внутренняя сортировка. Внешняя сортировка

Содержание

Слайд 2

3.1. Сортировка массивов

Внутренняя сортировка

Внешняя сортировка

3.1. Сортировка массивов Внутренняя сортировка Внешняя сортировка

Слайд 3

Три основных метода сортировки:
Обмен
2. Выбор
3. Вставка

Три основных метода сортировки: Обмен 2. Выбор 3. Вставка

Слайд 4

3.2. Простые методы сортировки
3.2.1. Метод пузырька и
шейкерная сортировка

3.2. Простые методы сортировки 3.2.1. Метод пузырька и шейкерная сортировка

Слайд 5

void s_puz(int a[], int n)

void s_puz(int a[], int n)

Слайд 6

void s_puz(int a[], int n)
{
int i, j, t;

void s_puz(int a[], int n) { int i, j, t;

Слайд 7

void s_puz(int a[], int n)
{
int i, j, t;
for(i=1; i <

void s_puz(int a[], int n) { int i, j, t; for(i=1; i
n; i++)
for( j=n-1; j >= i; j--)

Слайд 8

void s_puz(int a[], int n)
{
int i, j, t;
for(i=1; i <

void s_puz(int a[], int n) { int i, j, t; for(i=1; i
n; i++)
for( j=n-1; j >= i; j--)
if(a[j-1] > a[j])

Слайд 9

void s_puz(int a[], int n)
{
int i, j, t;
for(i=1; i <

void s_puz(int a[], int n) { int i, j, t; for(i=1; i
n; i++)
for( j=n-1; j >= i; j--)
if(a[j-1] > a[j])
{
t = a[j-1];
a[j-1] = a[j];
a[j] = t;
}
}

Слайд 10

void s_shaker(int a[], int n)
{ int i,j,t, l=0, r=n, k;
do
{

void s_shaker(int a[], int n) { int i,j,t, l=0, r=n, k; do
for( j=n-1; j > l; j--)
if(a[j-1] > a[j])
{
t = a[j-1];
a[j-1] = a[j];
a[j] = t;
k=j;
}
l=k+1;

Слайд 11

for(i=1; i < r; i++)
if(a[i-1] > a[i])
{
t

for(i=1; i if(a[i-1] > a[i]) { t = a[i-1]; a[i-1] = a[i];
= a[i-1];
a[i-1] = a[i];
a[i] = t;
k=i;
}
r=k-1;
} while(l}

Слайд 12

3.2.2. Сортировка выбором

3.2.2. Сортировка выбором

Слайд 13

void s_vb(int a[], int n)
{ int imin, i, j, t;

void s_vb(int a[], int n) { int imin, i, j, t;

Слайд 14

void s_vb(int a[], int n)
{ int imin, i, j, t;
for (i=0; i

void s_vb(int a[], int n) { int imin, i, j, t; for (i=0; i
i++)

Слайд 15

void s_vb(int a[], int n)
{ int imin, i, j, t;
for(i=0; i {

void s_vb(int a[], int n) { int imin, i, j, t; for(i=0;
imin=i;
for(j=i+1; j if (a[imin]>a[j]) imin=j;

Слайд 16

void s_vb(int a[], int n)
{ int imin, i, j, t;
for(i=0; i {

void s_vb(int a[], int n) { int imin, i, j, t; for(i=0;
imin=i;
for(j=i+1; j if (a[imin]>a[j]) imin=j;
if (imin != i) {
t = a[imin];
a[imin] = a[i];
a[i] = t;
}
}
}

Слайд 17

3.2.3. Сортировка вставками

3.2.3. Сортировка вставками

Слайд 18

void s_vst(int a[], int n)
{
int i, j, t;
for(i=1; i {
t

void s_vst(int a[], int n) { int i, j, t; for(i=1; i
= a[i];
for(j=i-1; j>=0 && t a[j+1] = t;
}
}

Слайд 19

3.3. Улучшенные методы сортировки

3.3. Улучшенные методы сортировки

Слайд 20

3.3.1. Метод Шелла

3.3.1. Метод Шелла

Слайд 21

void s_shell(int a[], int n)
{
int i, j, t;
for(int d=3; d>0; d--)

void s_shell(int a[], int n) { int i, j, t; for(int d=3;
for(i=d; i {
t = a[i];
for(j=i-d; j>=0 && t a[j+d] = t;
}
}

Слайд 22

3.3.2. Сортировка слиянием

a[1..n]

a[l, m] a[m+1,r]

3.3.2. Сортировка слиянием a[1..n] a[l, m] a[m+1,r]

Слайд 23

void slip(int l, int m, int r)
{
int i=l, j=m+1, k=0;
while ((i<=m) &&

void slip(int l, int m, int r) { int i=l, j=m+1, k=0;
(j<=r)) {
if (a[i] else {c[k]=a[j]; j++; k++; }
}
while (i<=m) {c[k]=a[i]; i++; k++; }
while (j<=r) {c[k]=a[j]; j++; k++; }
for (k=0, i=l; i<=r; i++, k++) a[i]=c[k];
}

Слайд 24

void s_sl(int l, int r)
{
if (l < r)
{
int m=(l+r)/2;
s_sl(l,m);

void s_sl(int l, int r) { if (l { int m=(l+r)/2; s_sl(l,m); s_sl(m+1,r); slip(l,m,r); } }
s_sl(m+1,r);
slip(l,m,r);
}
}

Слайд 25

s_sl(0,n-1);

s_sl(0,n-1);

Слайд 26

3.3.3. Метод QuickSort
(быстрая сортировка
или сортировка Хоара)

3.3.3. Метод QuickSort (быстрая сортировка или сортировка Хоара)

Слайд 27

do {
while (a[i] < x && i < right) i++;
while (a[j]

do { while (a[i] while (a[j] > x && j > left)
> x && j > left) j--;
if (i<=j) {
t = a[i];
a[i] = a[j];
a[j] = t;
i++; j--;
}
} while(i<=j);

Слайд 28

if(left < j) s_qsr(left, j);
if(i < right) s_qsr(i, right);
}

if(left if(i }

Слайд 29

void s_qs(char a[], int n)
{
struct
{
int l;

void s_qs(char a[], int n) { struct { int l; int r; } stack[20];
int r;
} stack[20];

Слайд 30

int i, j, left, right, x, t, s=0;
stack[s].l = 0;
stack[s].r =

int i, j, left, right, x, t, s=0; stack[s].l = 0; stack[s].r
n-1;
while (s != -1)
{
left=stack[s].l; right=stack[s].r;
s--;

Слайд 31

while (left < right)
{
i=left; j=right; x=a[(left+right)/2];
while (i <= j) {
while (a[i] <

while (left { i=left; j=right; x=a[(left+right)/2]; while (i while (a[i] while (a[j]
x) i++;
while (a[j] > x) j--;
if (i<=j) {
t=a[i]; a[i]=a[j]; a[j]=t;
i++; j--;
}
}

Слайд 32

if ((j-left)<(right-i))
{
if (i stack[s].l=i; stack[s].r=right; }
right=j;
}
else {
if (left

if ((j-left) { if (i stack[s].l=i; stack[s].r=right; } right=j; } else {
{s++;
stack[s].l=left; stack[s].r=j; }
left=i;
}
} } }

Слайд 33

3.5. Поиск в массиве структур

3.5. Поиск в массиве структур

Слайд 34

Линейный поиск

int p_lin1(int a[],int n, int x)

Линейный поиск int p_lin1(int a[],int n, int x)

Слайд 35

int p_lin1(int a[],int n, int x)
{
for(int i=0; i < n; i++)

int p_lin1(int a[],int n, int x) { for(int i=0; i

Слайд 36

int p_lin1(int a[],int n, int x)
{
for(int i=0; i < n; i++)

int p_lin1(int a[],int n, int x) { for(int i=0; i if (a[i]==x) return i;
if (a[i]==x) return i;

Слайд 37

int p_lin1(int a[],int n, int x)
{
for(int i=0; i < n; i++)

int p_lin1(int a[],int n, int x) { for(int i=0; i if (a[i]==x)
if (a[i]==x) return i;
return -1;
}

Слайд 38

int p_lin1(int a[],int n, int x)
{
for(int i=0; i < n; i++)

int p_lin1(int a[],int n, int x) { for(int i=0; i if (a[i]==x)
if (a[i]==x) return i;
return -1;
}

Слайд 39

int p_lin2(int a[],int n, int x)

int p_lin2(int a[],int n, int x)

Слайд 40

int p_lin2(int a[],int n, int x)
{
a[n]=x;
int i=0;

int p_lin2(int a[],int n, int x) { a[n]=x; int i=0;

Слайд 41

int p_lin2(int a[],int n, int x)
{
a[n]=x;
int i=0;
while (a[i]!=x) i++;

int p_lin2(int a[],int n, int x) { a[n]=x; int i=0; while (a[i]!=x) i++;

Слайд 42

int p_lin2(int a[],int n, int x)
{
a[n]=x;
int i=0;
while (a[i]!=x) i++;
if (i==n)

int p_lin2(int a[],int n, int x) { a[n]=x; int i=0; while (a[i]!=x)
return -1;

Слайд 43

int p_lin2(int a[],int n, int x)
{
a[n]=x;
int i=0;
while (a[i]!=x) i++;
if (i==n)

int p_lin2(int a[],int n, int x) { a[n]=x; int i=0; while (a[i]!=x)
return -1;
else return i;
}

Слайд 44

Поиск делением пополам

int p_dv(int a[], int n, int x)

Поиск делением пополам int p_dv(int a[], int n, int x)

Слайд 45

int p_dv(int a[], int n, int x)
{
int i=0, j=n-1, m;

int p_dv(int a[], int n, int x) { int i=0, j=n-1, m;

Слайд 46

int p_dv(int a[], int n, int x)
{
int i=0, j=n-1, m;
while(i

int p_dv(int a[], int n, int x) { int i=0, j=n-1, m; while(i

Слайд 47

int p_dv(int a[], int n, int x)
{
int i=0, j=n-1, m;
while(i m=(i+j)/2;

int p_dv(int a[], int n, int x) { int i=0, j=n-1, m; while(i m=(i+j)/2;

Слайд 48

int p_dv(int a[], int n, int x)
{
int i=0, j=n-1, m;
while(i m=(i+j)/2;

int p_dv(int a[], int n, int x) { int i=0, j=n-1, m;
if (x > a[m]) i=m+1; else j=m;
}

Слайд 49

int p_dv(int a[], int n, int x)
{
int i=0, j=n-1, m;
while(i m=(i+j)/2;

int p_dv(int a[], int n, int x) { int i=0, j=n-1, m;
if (x > a[m]) i=m+1; else j=m;
}
if (a[i]==x) return i;

Слайд 50

int p_dv(int a[], int n, int x)
{
int i=0, j=n-1, m;
while(i m=(i+j)/2;

int p_dv(int a[], int n, int x) { int i=0, j=n-1, m;
if (x > a[m]) i=m+1; else j=m;
}
if (a[i]==x) return i;
else return -1;
}

Слайд 51

Интерполяционный поиск

Интерполяционный поиск

Слайд 52

int p_dv(int a[], int n, int x)

int p_dv(int a[], int n, int x)

Слайд 53

int p_dv(int a[], int n, int x)
{ int i=0, j=n-1, m;

int p_dv(int a[], int n, int x) { int i=0, j=n-1, m;

Слайд 54

int p_dv(int a[], int n, int x)
{ int i=0, j=n-1, m;
while(i

int p_dv(int a[], int n, int x) { int i=0, j=n-1, m; while(i

Слайд 55

int p_dv(int a[], int n, int x)
{ int i=0, j=n-1, m;
while(i

int p_dv(int a[], int n, int x) { int i=0, j=n-1, m;
{
if (a[i]==a[j]) if (a[i]==x) return i;
else return -1;

Слайд 56

int p_dv(int a[], int n, int x)
{ int i=0, j=n-1, m;
while(i

int p_dv(int a[], int n, int x) { int i=0, j=n-1, m;
{
if (a[i]==a[j]) if (a[i]==x) return i;
else return -1;
m=i+(j-i)*(x-a[i])/(a[j]-a[i]);

Слайд 57

int p_dv(int a[], int n, int x)
{ int i=0, j=n-1, m;
while(i

int p_dv(int a[], int n, int x) { int i=0, j=n-1, m;
{
if (a[i]==a[j]) if (a[i]==x) return i;
else return -1;
m=i+(j-i)*(x-a[i])/(a[j]-a[i]);
if (a[m]==x) return m;

Слайд 58

int p_dv(int a[], int n, int x)
{ int i=0, j=n-1, m;
while(i

int p_dv(int a[], int n, int x) { int i=0, j=n-1, m;
{
if (a[i]==a[j]) if (a[i]==x) return i;
else return -1;
m=i+(j-i)*(x-a[i])/(a[j]-a[i]);
if (a[m]==x) return m;
else

Слайд 59

int p_dv(int a[], int n, int x)
{ int i=0, j=n-1, m;
while(i

int p_dv(int a[], int n, int x) { int i=0, j=n-1, m;
{
if (a[i]==a[j]) if (a[i]==x) return i;
else return -1;
m=i+(j-i)*(x-a[i])/(a[j]-a[i]);
if (a[m]==x) return m;
else if (x > a[m]) i=m+1; else j=m-1;
Имя файла: Сортировка-и-поиск.-Сортировка-массивов.-Внутренняя-сортировка.-Внешняя-сортировка.pptx
Количество просмотров: 32
Количество скачиваний: 0