Сортировка вставками (не работает) - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д