- •Метод вставок
- •Метод выбора
- •Метод обмена
- •Метод обмена Антона
- •Метод подсчета
- •Метод подсчета
- •Поиск инверсными массивами
- •Метод золотого сечения
- •Метод фиббоначи
- •Поиск по двоичному дереву(флоат)
- •Сортировка с помощью дерева
- •Хеширование
- •Хеширование
- •Шифрование. Простая подстановка
- •Метод Шелла
- •Поиск по двоичному дереву
- •Метод дихотомии
- •Многоаспектныйпоиск с использ инверстных массивов (интервал)
- •Метод выбора
- •Гаммирование
Метод обмена Антона
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
main (){
int *x,i,a,n=0,k=0,j,tmp;
char s[100],b[100];
FILE *in;
FILE *out;
printf ("Enter a name of an entrance file\n");
scanf ("%s",s);
in=fopen (s,"r+t");
for (;;) {
a=fscanf (in,"%d\n",&n);
if (a>0) {
k++; }
else {
break; }}
printf ("Kolichestvo elementov %d\n",k);
getch ();
x=(int*)malloc(sizeof(int)*k);
fseek(in,0,SEEK_SET);
for(i=0;i<k;i++){
fscanf (in,"%d\n",&x[i]);
printf ("x[%d]=%d\n",i,x[i]); }
for (j=k;j>0;j--) {
for(i=0;i<k;i++) {
if (x[i]>x[i+1]){
tmp=x[i];
x[i]=x[i+1];
x[i+1]=tmp; }
else break; }}
getch ();
printf ("Enter name file:\n");
scanf ("%s",b);
out=fopen (b,"w+t");
printf ("Otsortirovanye chisla:\n");
for(i=0;i<k;i++) {
fprintf (out,"%d",x[i]);
printf ("%d\n",x[i]); }
fclose (in);
fclose (out);
free (x);
getch(); }
Метод подсчета
#include<stdio.h>
#include<conio.h>
int read(char*name);
int write(char*name);
void sort();
void print();
int *arr,*sortarr;
int n;
main(){
char f1[256],f2[256];
int res;
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();
res = write(f2);
if (res) {
printf("Error writing file.");
getch();
return 0;}
getch();
delete arr;
return 0;}
int read(char*name) {
FILE*f;
int tmp,i;
f = fopen(name,"rt");
if (f == NULL) return 1;
// count
for(i=0; ;i++){
if (feof(f)) break;
fscanf(f,"%d",&tmp); }
n=i;
arr = new int [n];
fclose(f);
// read
f= fopen(name,"rt");
if (f == NULL) return 1;
for(i=0;i<n ;i++) {
fscanf(f,"%d",&arr[i]); }
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,"%d ",arr[i]); }
fclose(f);
return 0;}
void sort(){
int i,j,*B;
sortarr = new int [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(arr[i]>arr[j]) 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]; }
for(i=0;i<n;i++) {
arr[i]=sortarr[i]; }
delete B,sortarr; }
void print() {
int i;
for(i=0;i<n;i++){
printf("%d ",arr[i]); }}
Метод подсчета
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#define N 20
void main() {
char **X, numb=0, k, min, Y[N], Temp[10];
int n=sqrtf(N);
struct info
{ char a;
int b; };
struct info mass[N]={' ',0};
struct info mass_sort[N]={' ',0};
if (N>n*n) n++;
for (int i=0; i<N; i++) //заполнение
{ mass[i].b=rand()%100;
mass[i].a=toascii(rand()%128);
printf (" %c %d \n", mass[i].a, mass[i].b); }
X=(char **)malloc(sizeof(char)*n);
for (int i=0;i<n; i++)
X[i]=(char *)malloc(sizeof(char)*n);
for (int i=0;i<n; i++) //разбиение на ленты
for (int j=0;j<n; j++, numb++)
{ X[i][j]=mass[numb].a;
if (numb>N-1) X[i][j]=127; }
for (int l=0; l<n; l++)//сортировка внутри каждой ленты
{ for (int i=0;i<n; i++)
{k=0;
for (int j=0;j<n; j++)
if(X[l][i]>X[l][j]) k++;
Temp[k]=X[l][i]; }
for (int i=0;i<n; i++)
X[l][i]=Temp[i];
for (int i=0;i<n; i++)
Temp[i]=0; }
for (int i=0;i<n; i++)//заполнение предыдущего в случае одинаковых ячеек
for (int j=0;j<n; j++)
if (X[i][j]==0) X[i][j]=X[i][j-1];
for (int i=0;i<n; i++)
{ for (int j=0;j<n; j++)
printf ("%c(%d)", X[i][j], X[i][j]);
printf("\n"); }
int toleft=0; //слияние
for (int j=0; j<N; j++)
{ min=X[0][0];
for (int i=0; i<n; i++)
{if (X[i][0]<min)
{min=X[i][0];
toleft=i; } }
Y[j]=min;
for (int q=0; q<n; q++)
X[toleft][q]=X[toleft][q+1];
X[toleft][n-1]=127;
toleft=0; }
for (int i=0; i<N; i++) //запись отсортированных структур в новый массив
for (int j=0; j<N; j++)
{ if (Y[i]==mass[j].a)
{ mass_sort[i].a=mass[j].a mass_sort[i].b=mass[j].b;
break; }
if (Y[i]==Y[i-1])
{ for (j+1; j<N; j++)
if (Y[i]==mass[j].a) { mass_sort[i].a=mass[j].a; mass_sort[i].b=mass[j].b;}}}
for (int i=0; i<N; i++)
printf (" %c %d \n", mass_sort[i].a, mass_sort[i].b);
getch(); }