Добавил:
okley
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:2 семестр / sr14
.c#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int K;
int N;
int prv=0, srv=0, srvOPT=0, prvOPT=0;
int *c;
int Prandom(int range_min, int range_max){ // Функция для произвольного диапазона случайных числен
int r = ((double)rand() / RAND_MAX) * (range_max - range_min) + range_min;
return(r);
}
void SortInp(int **A){ // Обычный алгоритм вставкой
int i, j, temp, aver;
for(i=0; i<N; i++){
j=0;
while(j<i){
if((*A)[i]<(*A)[j]){
temp=(*A)[j];
(*A)[j]=(*A)[i];
(*A)[i]=temp;
// printm(A, N);
prv+=3;
}
srv++;
j++;
}
}
}
void SortInpOpt(int **A){ // Оптимизированный алгоритм
int i, j, temp, aver;
aver=0;
for(j=0; j<N; j++){
aver+=(*A)[j];
}
aver/=N;
for(i=0; i<N; i++){
srvOPT++;
if(A[i]>aver){
j=0;
while(j<i){
if((*A)[i]<(*A)[j]){
temp=(*A)[j];
(*A)[j]=(*A)[i];
(*A)[i]=temp;
printm(A, N);
prvOPT+=3;
}
srvOPT++;
j++;
}
}
else{
j=i;
while((*A)[j-1]>(*A)[j]){
temp=(*A)[j];
(*A)[j]=(*A)[j-1];
(*A)[j-1]=temp;
printm(A, N);
prvOPT+=3;
srvOPT++;
j--;
}
}
}
}
void insert(int **a, int n, int k, int A) {
int *q;
int i;
q = (int*) realloc(*a, (n+1)*sizeof(int));
if (q==NULL) {
printf("Ошибка! Нет памяти.");
}
else {
*a = q;
for(i=n; i>=k; i--){
(*a)[i+1] = q[i];
}
(*a)[k]=A;
}
}
void swap(int **a, int i, int j){
int b;
b=(*a)[i];
(*a)[i]=(*a)[j];
(*a)[j]=b;
}
void swapN(int **a, int n){ // Функция 1 (для перестановки)
int i;
int b[2*n+1];
b[0]=0;
for(i=0; i<2*n; i++){
b[i]=(*a)[i];
}
for(i=0; i<2*n; i++){
if(i%2){
(*a)[i]=b[(n+i/2)];
}
else{
(*a)[i]=b[((i+1)/2)];
}
}
}
void printm(int **a, int n){ // Вывод
int l;
for(l=0; l<n; l++){
printf("%3d", l+1);
}
printf("\n");
for(l=0; l<n; l++){
printf("%3d", (*a)[l]);
}
printf("\n");
printf("\n");
}
void output_mas_file(int **a, int N){ // Функция для вывода массива в файл
FILE *fp;
char b[20];
if ( (fp = fopen("test.txt","w")) == NULL ) {
printf("Ошибка!\n");
exit(1);
}
int i;
for(i=0; i<N; i++){
sprintf(b, "%d", (*a)[i]);
fputs(b, fp);
fputs(" ", fp);
}
fclose(fp);
}
void remove_element(int **a, int k, int N){ // Удаление одного элемента
int i;
for(i=(k-1); i<N-1; i++){
(*a)[i]=(*a)[i+1];
}
K--;
(*a) = (int*) realloc((*a), (N-1)*sizeof(int));
}
void add_element(int **a, int k, int N, int B){
int i;
(*a) = (int*) realloc((*a), (N+1)*sizeof(int));
for(i=N; i>=k; i--){
(*a)[i]=(*a)[i-1];
}
K++;
(*a)[k-1]=B;
}
void input_mas_file(int **a){ // Функция для вывода массива из файла
int A[100];
char b[100];
int ch;
int i=0, j=0;
FILE *fp;
fp = fopen("test2.txt","r");
ch = getc(fp);
while (ch != EOF) {
if(ch==' '){
b[i]='\0';
A[j]=atoi(b);
i=0;
j++;
}
b[i]=ch;
ch = getc(fp);
i++;
}
fclose(fp);
A[j]=atoi(b);
K=j+1;
c = (int *) malloc((j+1) * sizeof (int));
for(i=0; i<=j; i++){
c[i]=A[i];
}
}
void remove_range(int **a, int A, int B){ // Удаление элементов заданного интервала
int i, j=0;
for(i=0; i<K; i++){
if(((*a)[i]>=A)&&((*a)[i]<=B)){
j++;
}
}
int *D;
D = (int *) malloc(j * sizeof (int));
j=0;
for(i=0; i<K; i++){
if(((*a)[i]>=A)&&((*a)[i]<=B)){
D[j]=i;
j++;
}
}
for(i=0; i<j; i++){
remove_element(a, (D[i]-i+1), K);
}
}
int main(void){
int j, k, i;
K=0;
int *dinmas, *copy_m;
scanf("%d", &N);
dinmas = (int *) malloc(N * sizeof (int));
if(dinmas == NULL){
exit(EXIT_FAILURE);
}
copy_m = (int *) malloc(N * sizeof (int));
if(copy_m == NULL){
exit(EXIT_FAILURE);
}
// for(j=0; j<N; ++j){
// scanf("%d", &dinmas[j]);
// }
for(i=0; i<N; i++){
dinmas[i]=Prandom(1, 100);
}
for(j=0; j<N; ++j){
copy_m[j]=dinmas[j];
}
printm(&dinmas, N);
SortInpOpt(&dinmas);
printf("%d %d\n", srvOPT, prvOPT);
SortInp(©_m);
printf("\n");
printf("%d %d\n", srv, prv);
}
Соседние файлы в папке 2 семестр
