Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРАКТИКУМ_4.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
292.35 Кб
Скачать

24. Сортировка_1 простыми вставками

#include "stdafx.h"

#include <math.h>

#include <iostream>

using namespace std;

#include <conio.h>

void main ()

{

int A[20],X; //Х - временное хранение выносимой переменной

int i,n,j,FLAG,k=1; // k - число проходов, необходимых для сортировки

cout<<"Enter the ize of dimension A[] , n= ";

cin>>n;

cout<<"\n Enter items of dimension: \n";

for(i=1;i<=n;i++) cin>>A[i];

while(k<n)

{

A[0]=-1;

FLAG=0;

// FLAG=1 признак наличия в цикле вставки Х в найденное место

for(i=1;i<=n;i++)

{

if(FLAG==1) break; // проход завершен, Х найден

if(A[i]<A[i-1])

{

X=A[i];

A[i]=A[i-1];

for(j=i-2;j>=0;j--)

{

if((A[j]<X)&&(FLAG==0))

{

A[j+1]=X;

FLAG=1;

j=-1;

}

if(A[j]>X)A[j+1]=A[j]; //сдвиг вправо

}

}

}

if(FLAG==0) break;

// выход из цикла, т.к. массив чисел уже отсортирован

k++;

}

cout<<"\n Result: \n";

for(i=1;i<=n;i++) cout<<A[i]<<" ";

_getch();

}

25. Сортировка_2 простыми вставками

#include "stdafx.h"

#include <iostream>

using namespace std;

#include <conio.h>

#define SIZE 10

// сортировка вставками

int main ()

{

int A[SIZE],i,k,j,ch,n;

cout<<"Enter size A[] , n= ";

cin>>n;

cout<<"\n Enter elements: \n";

for(i=1;i<=n;i++) cin>>A[i];

A[0]=-100;

for (i=1;i<=n;i++) // цикл по прогонам и по числам одновременно

{

if(A[i]> A[i+1]) // не в том порядке, выносим A[i+1]

{

ch=A[i+1];

for(j=0;j<i;j++) // ищем место

{

if((ch<A[j+1])&&(ch>A[j]))

{

for(k=j+1;k<(i+1);k++) A[k+1]=A[k]; A[j+1]=ch;

}

}

}

cout<<"\n work array: \n";

for(int t=1;t<=n;t++) cout<<A[t]<<" ";

}

cout<<"\n Resultat: \n";

for(i=1;i<=n;i++) cout<<A[i]<<" ";

_getch();

return 0;

}

26. Сортировка алгоритмом Шелла

#include "stdafx.h"

#include <math.h>

#include <iostream>

using namespace std;

#include <conio.h>

void shell (int *, int, int);

int main ()

{

/* Инициализация */

int A[40];

int i,n;

cout<<"Enter n= ";

cin>>n;

cout<<"\n Enter array \n";

for(i=0;i<n;i++) cin>>A[i];

shell(A,n,5); //5 - начальный шаг

cout<<"Result:\n";

for(i=0;i<n;i++) cout<<" "<<A[i];

_getch();

return 0;

}

void shell (int * A, int n, int k)

{

for (;k>=1;k--) // для каждого убывающего шага

{

for (int i=0;i<n;i++) // цикл по индексу массива

{

for (int j=i;j+k<n;j=j+k)

// выполняем сортировку j+k чисел

{

for (int l=j+k;l<n;l=l+k)

{

if(A[j]>A[l])

{

int X=A[j];

A[j]=A[l];

A[l]=X;

}

}

}

}

cout<<"\n k="<<k;

for(int v=0;v<n;v++) cout<<" "<<A[v];

cout<<"\n";

}

}

27. Быстрая сортировка Хоора

// ПРОГРАММНАЯ РЕАЛИЗАЦИЯ АЛГОРИТМА БЫСТРОЙ СОРТИРОВКИ ХООРА элементов по возрастанию их значений

#include "stdafx.h"

#include <math.h>

#include <iostream>

using namespace std;

int n;

void xoor(int*,int,int,int);

main()

{

// Инициализация

int A[40];

int i;

printf ("Input n= ");

scanf("%d",&n);

printf(" Enter items of array A:\n");

for(i=0;i<=n-1;i++) scanf("%d",&A[i]);

xoor(A,0,n-1,n);

printf(" Selected array A: \n");

for(i=0;i<=n-1;i++)printf(" %d ",A[i]);

return 0;

}

// РЕКУРСИЯ

void xoor(int* A,int m,int l,int n)

{

int i,j=l,k=0,p,X=A[(m+l)/2];

for(i=m;i<=(l+m)/2;i++)

{

if(((A[i]>X) && (A[j]<=X))||(A[i]> A[j]))

{

p=A[j];

A[j]=A[i];

A[i]=p;

xoor(A,m,l,n);

}

else i--;

j--;

if(j==(l+m)/2)

{

i++;

j=l;

}

}

for(i=0;i<=n-1;i++)

{

if(A[i]<A[i+1])k=k+1;

}

if(k==n) return;

if (m<(l-1)) // сортировка правой части от m до l

{

m=(l+m)/2;

xoor(A,m,l,n);

}

else // сортировка левой части от l/2 элемента до m

{

l=m;

m=l/2;

if(l!=0)xoor(A,m,l,n);

}

}