Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в программирование на С.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
930.82 Кб
Скачать

Void main()

{

const int n=6;

int x[n],i,buf,j,k;

for(i=0;i<n;i++){

printf("x[%d]=",i);

scanf("%d",&x[i]);

}

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

k=i;

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

if(x[k]>x[j])

k=j;

}

buf=x[i];

x[i]=x[k];

x[k]=buf;

}

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

printf("x[%d]=%d\n",i,x[i]);

}

  1. Сортировка массива по убыванию, выбором наибольшего элемента

  2. Сортировка массива по методу Шелла, по возрастанию.

На начальном этапе сравниваются элементы отстоящих на n/2 друг от друга и если есть необходимость, происходит перемещение этих элементов. Причем сравнение элементов на расстоянии n/2 происходит до тех пор, пока не было ни одного обмена. Далее сравниваются элементы, отстоящие на n/4 и т.д. пока не будут сравниваться соседние элементы.

Данная сортировка считается высоко производительной.

#include<stdio.h>

Void main()

{

const int n=6;

int x[n],i,buf,j,k,k1;

for(i=0;i<n;i++){

printf("x[%d]=",i);

scanf("%d",&x[i]);

}

for( k=n/2;k>0;k/=2){

do{

k1=0;

for(i=0,j=k;j<n;i++,j++){

if(x[i]>x[j]){

buf=x[i];

x[i]=x[j];

x[j]=buf;

k1++;

}

}

}while(k1);

}

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

printf("x[%d]=%d\n",i,x[i]);

}

  1. Сортировка массива по методу Шелла, по убыванию.

  2. Введите два индекса, и поменять местами элементы.

  3. Ввести 20 мерный массив и отсортировать от 0 до 9 пузырьковым методом по возрастанию, и от 10 до 19 нахождением минимального элемента.

  4. Введите два массива целых чисел. Второй массив упорядочен по возрастанию своих значений. Определить, какие числа первого массива входят и во второй массив.

#include<stdio.h>

#define MAXSIZE 100

Void main(){

int i,sz1,sz2,k,k1,j;

Int arr1[maxsize],arr2[maxsize],buf;

do{

printf("\nВведите размеры массивов: ");

scanf("%d%d",&sz1,&sz2);

}while((sz1>MAXSIZE)||(sz2>MAXSIZE));

printf("\nВвод I-го массива:\n");

for(i=0;i<sz1;i++)

scanf("%d",&arr1[i]);

printf("\nВвод II-го массива:\n");

for(i=0;i<sz2;i++)

scanf("%d",&arr2[i]);

//Сортировка II-го массива

for(i=0;i<sz2-1;i++){

for(k=i,j=i+1;j<sz2;j++)

if(arr2[k]>arr2[j])

k=j;

buf=arr2[i];

arr2[i]=arr2[k];

arr2[k]=buf;

}

printf("Числа входящие в оба массива:\n");

for(i=0;i<sz1;i++){

if(arr1[i]==arr2[sz2/2]){

printf("%d ",arr1[i]);

continue;

}

if(arr1[i]>arr2[sz2/2]){

k=sz2/2+1;

k1=sz2;

}

else{

k=0;

k1=sz2/2;

}

for(j=k;j<k1;j++)

if(arr1[i]==arr2[j]){

printf("%d ",arr1[i]);

continue;

}

}

}

  1. Введите два массива вещественных чисел. Второй массив упорядочен в порядке убывания. Определить, какие числа первого массива входят и во второй массив.

  2. Даны координаты n точек. x1,y1,x2,y2,…….xn,yn. Найти координаты точек, которые находятся на максимальном расстоянии друг от друга.

#include<stdio.h>

Void main()

{

const int n=4;

int x[2*n]={-8,-5,

5,10,

10,8,

8,-2};

int max_ab,max1,max,i_a,i_b,i1,i2,i,j;

max_ab=max=0;

i_a=0;

i_b=0;

for(i=0;i<2*n-2;i+=2)

{

i1=i;

for(j=i+2,i2=j;j<2*n;j+=2)

{

max1=(x[i]-x[j])*(x[i]-x[j])+(x[i+1]-x[j+1])*(x[i+1]-x[j+1]);

if(max<max1)

{

max=max1;

i1=i;i2=j;

}

}

if(max>max_ab)

{

max_ab=max;

i_a=i1;

i_b=i2;

}

}

printf("max (%d,%d) i (%d,%d)\n",x[i_a],x[i_a+1],x[i_b],x[i_b+1]);

}