- •Метод вставок
- •Метод выбора
- •Метод обмена
- •Метод обмена Антона
- •Метод подсчета
- •Метод подсчета
- •Поиск инверсными массивами
- •Метод золотого сечения
- •Метод фиббоначи
- •Поиск по двоичному дереву(флоат)
- •Сортировка с помощью дерева
- •Хеширование
- •Хеширование
- •Шифрование. Простая подстановка
- •Метод Шелла
- •Поиск по двоичному дереву
- •Метод дихотомии
- •Многоаспектныйпоиск с использ инверстных массивов (интервал)
- •Метод выбора
- •Гаммирование
Метод выбора
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
void main()
{ setlocale(LC_ALL,"Rus");
const int N=9, n=3, k=3;/*N -количество строк, n -количество элементов в ключе, k -количество лент*/
int L[N][n],L_new[N][n],i,j,q,p,h,l,dop,min[n],key,sch[k];/*L[N][n] - исходная лента L_new[N][n] - получаемая лента i,j,q,p,l - счетчики h,dop,key вспомогательные переменные min[n] - вспомогательный массив для поиска минимального элемента sch[k]- счетчики лент*/
for(i=0;i<N;i++)//ввод ленты
{ printf("\nВведите ленту №%d:\n",i);
for(j=0;j<n;j++)
{printf("Введите элемент %d: ", j);
scanf("%d",&L[i][j]);}}
/*сортировка каждой из лент методом выбора*/
for(q=0;q<k;q++)//счетчик по количеству лент
for(p=q*N/k;p<(q*N/k+N/k);p++)//счетчик элементов нужной ленты
{for(l=0;l<n;l++)//инициализация массива мин для сравнения min[l]=777;
for(i=p;i<(q*N/k+N/k);i++)//сортировка методом выбора
{key=0 ; for(j=0;j<n;j++)//нахождение минимального ключа {if((key!=1)&&(L[i][j]<min[j]))
{for(l=0;l<n;l++) min[l]=L[i][l]; h=i;//запоминание номера минимальной ленты key=1;}
else if((key!=1)&&(L[i][j]==min[j])) key=0;
else
key=1;}}
for(j=0;j<n;j++)//обмен элементов в ленте
{dop=L[h][j];
L[h][j]=L[p][j]; L[p][j]=dop;}}
for(i=0;i<k;i++)//инициализация счетчиков лент
sch[i]=i*N/k;
for(q=0;q<N;q++)//счетчик по количеству элементов
{for(l=0;l<n;l++)//инициализация массива мин для сравнения
min[l]=777;
for(p=0;p<k;p++)//счетчик по количеству лент
{ key=0;
for(j=0;j<n;j++)//слияние лент
{if((sch[p]<((p+1)*N/k))&&(key!=1)&&(L[sch[p]][j]<min[j]) { for(l=0;l<n;l++)
min[l]=L[sch[p]][l];
h=p;
key=1;}
else if((sch[p]<((p+1)*N/k))&&(key!=1)&&(L[sch[p]][j]==min[j])) key=0; else key=1;}}
for(j=0;j<n;j++)//запись нужной строки в нужный массив
L_new[q][j]=L[sch[h]][j];
sch[h]++;}
for(i=0;i<N;i++)//вывод получившегося массива
{ for(j=0;j<n;j++)
printf("%d ", L_new[i][j]);
printf("\n");}
getch();}
Гаммирование
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <conio.h>
#include <locale.h>
const int N=32;
char* code(char* str, int* mass)
{int count = 0;
char *res = (char*)malloc(strlen(str)*sizeof(char));
for(int i=0;i<=strlen(str);i++)
res[i]=str[i];
for(int i = 0; i < strlen(res); i++, count++)
{if(count == (N-1))
count = 0;
res[i] = ((str[i])^mass[count]);}
return res;}
int main()
{setlocale(LC_ALL,"Rus");
srand (time(NULL));
int mass[N];
for(int i = 0; i < N; i++)
mass[i] = rand()%100;
char file[100]="",str[100];
printf("Введите имя файла: ");
scanf("%s",file);
FILE *fp=fopen(file,"r+");
fgets(str,100,fp);
fclose(fp);
printf("\nИсходная строка: %s",str);
printf("\nЗакодированная строка: %s",code(str, mass));
printf("\nРаскодированная строка: %s",code(code(str, mass),mass));
getch();}
Обход смешанный в дв дереве
void obhod(Tree *root) { if(root->left) obhod(root->left); printf("\n%d",root->key); if(root->right) obhod(root->right); }
Блочный поиск
#include<stdio.h>
#include<conio.h>
#include<string.h>
int read(char*name);
int write(char*name);
int search(char* s);
int search1(int i1, int i2,char* s );
int directsearch(int i1, int i2,char* s);
void sort();
void print();
char **arr,**sortarr;
int *positions;
int n,k=5;
main()
{ char f1[256],f2[256],e[1024];
int res,i, sortedindex,originalindex;
printf("Input source file name:");
scanf("%s",f1);
printf("Input destination file name:");
scanf("%s",f2);
res = read(f1);
if (res)
{ printf("Error reading file.");
getch();
return 0; }
print();
sort();
print();
for(;;) {
printf("\n\nInput value (0 for exit)");
scanf("%s",e);
if (strcmp(e,"0") == 0) break;
sortedindex=search(e);
if(sortedindex!=-1) {
originalindex = positions[sortedindex];
printf("\nvalue #%d,%s",originalindex,arr[sortedindex]); }
else printf("\nValue not found");
} res = write(f2);
if (res)
{printf("Error writing file.");
getch();
return 0;}
for(i=0;i<n;i++) delete arr[i];
delete arr;
delete positions;
return 0;}
int read(char*name)
{FILE*f;
char *tmp=NULL;
int i,len;
tmp = new char [1024];
f = fopen(name,"rt");
if (f == NULL) return 1;
// count
for(i=0; ;i++)
{ if (feof(f)) break;
fscanf(f,"%s",tmp); }
n=i;
arr = new char* [n];
positions = new int [n];
for(i=0;i<n;i++) arr[i]=NULL;
fclose(f);
//read
f= fopen(name,"rt");
if (f == NULL) return 1;
for(i=0;i<n ;i++)
{fscanf(f,"%s",tmp);
len=strlen(tmp);
arr[i]= new char [len+1];
strcpy(arr[i],tmp); }
delete tmp;
fclose(f);
return 0;}
int write(char*name)
{ int i;
FILE *f;
f=fopen(name,"wt");
if (f == NULL) return 1;
for(i=0;i<n ;i++)
{fprintf(f,"%s ",arr[i]); }
fclose(f);
return 0;}
int search(char* s)
{ int res;
res=search1(0,n-1,s);
return res;}
int search1(int i1, int i2,char* s )
{int res,i;
int indbeg;
int indend;
if(i2-i1<k) return directsearch(i1,i2,s);
for(i=0;i<k;i++)
{indend=(i2-i1+1)*(i+1)/k-1;
indbeg=(i2-i1+1)*(i)/k;
res=strcmp(arr[indend],s);
if(res==0) return indend;
else if (res > 0) return search1(indbeg,indend,s);}
return -1;}
int directsearch(int i1, int i2,char* s)
{ int i;
for(i=i1;i<=i2;i++)
{if(strcmp(s,arr[i])==0) return i;
}return -1;
}void sort(){
int i,j,*B;
sortarr = new char* [n];
B = new int[n];
for(i=0;i<n;i++) B[i]=0;
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
{if(strcmp(arr[i],arr[j])>0) B[i]++; } }
printf("\n");
for(i=0;i<n;i++)
{ for(j=i+1;j<n;j++)
{ if(arr[i]==arr[j]) B[i]++; }}
for(i=0;i<n;i++) {
sortarr[B[i]]=arr[i];
positions[B[i]] = i;}
for(i=0;i<n;i++)
{ arr[i]=sortarr[i]; }
delete sortarr,B;}
void print()
{ int i;
for(i=0;i<n;i++) {
printf("%s ",arr[i]); }}