Сортировка вставками (не работает) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Программа генерирует массив в фаил и сортирует его методом вставок. Но сама сортировка не происходит
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100
 
int main(void) 
{
    srand(time(NULL));
    FILE *file; 
    int i, j=0, step=0, tmp=N;
    int *A=(int*)malloc(sizeof(int)*N);
    int mas[N];
    printf("Array:\n");
    for(i=0; i<N; ++i)
    {
        mas[i] = rand() %(100-(-100)+1)+(-100);
        printf("%d ", mas[i]);
    }
    puts("");
    if((file = fopen("C://out.dat","wb+"))==NULL)
        printf( "The file was not opened\n" ); 
    else
    {
        fwrite(&tmp,sizeof(int),1,file);
        fwrite(mas,sizeof(int),N,file);//òåïåðü Гў ГґГ*éëå Г*Г*Гё Г¬Г*Г±Г±ГЁГў(ГЎГЁГ*Г*Г°Г*ûé) 
        rewind(file);
        fread(&step, sizeof(int), 1, file); 
        fread(A, sizeof(int), step, file);
        for(i = 1; i < N; i++)
        {
            tmp = A[i];
            for(j = i; j>=step; j-=step)
            {
                tmp=A[i];
                for(j=i-1; j>=0 && A[j]>tmp; j--)A[j+1]=A[j];   
            A[j+1] = tmp;
        }
    }
        printf("Sorted array:\n");
        for (i = 0; i < 100; i++)
        {
            printf("%d ", A[i]);
        } 
    }
    fclose(file);
    return 0;
}

Решение задачи: «Сортировка вставками (не работает)»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int GetInt(FILE *f, int p)
{
    int r;
    fseek(f,(p*4),SEEK_SET);
    fread(&r,sizeof(r),1,f);
    return r;
}    
 
void PutInt(FILE *f, int p, int v)
{
    fseek(f,(p*4),SEEK_SET);
    fwrite(&v,sizeof(v),1,f);
}    
 
int iSort(char *fname, int N)
{
  FILE *f;   
  int i,j,x,y,k;
  
  f=fopen(fname,"rb+");
  if (f==NULL) return 1;
  
  for (i=1; i<N; i++)
  {
      x=GetInt(f,i); 
      
      for (j=i-1; j>=0; j--)
      {
          y=GetInt(f,j);
          
          if (x<y)
          {
             PutInt(f,(j+1),y);
             k=j;
          }   
          else
          {
             k=j+1;
             break;
          }
                 
      }
      
      if (k>=0) PutInt(f,k,x);
      
      
  }
  
  fclose(f); 
  return 0;
  
} 
 
void PrintFile(char *fname)
{
     FILE *f;
     int i,r,fsize;
     
     f=fopen(fname,"r");
     if (f==NULL) return;
          
     fseek(f,0,SEEK_END);
     fsize=ftell(f);
     
     i=0;
     
     while (1)
     {
        if (i*4>=fsize) break;
           
        r=GetInt(f,i);
        printf("%d ",r);
        
        i++;
        
     }       
     fclose(f);
     printf("\n\n");
}     
 
int main(int argc, char *argv[])
{
 
  FILE *f;
  char *fname="f.dat";
  int A[10]={3,-7,12,1,3,3,6,7,98,-55};
  int i;
  
  f=fopen(fname,"w");
  if (f==NULL) return 1;
  
  for (i=0; i<10; i++) PutInt(f,i,A[i]);
  
  fclose(f);
  
  PrintFile(fname);
  
  iSort(fname,10);
  
  PrintFile(fname);
  
  system("PAUSE");  
  return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5