Advertisement
ilyaaaaa

Untitled

Jan 29th, 2020
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.15 KB | None | 0 0
  1. void sort_shell()  //  сортировка по шеллу
  2. {
  3.  
  4.     if ((fl = fopen("struct.dat", "rb+")) == NULL)
  5.     {
  6.         cout << "file didn't read" << endl;
  7.     }
  8.     else cout << "file readed GOOD" << endl;
  9.     rewind(fl);
  10.  
  11.     int n = 0;
  12.  
  13.     n = _filelength(_fileno(fl)) / sizeof(train_to_brest);
  14.  
  15.     rewind(fl);
  16.  
  17.    
  18.  
  19.     int count = 0;
  20.     int kolvo = 1;
  21.     int element_j;
  22.     int element_j_step;
  23.    
  24.     train_to_brest mass_j;
  25.     train_to_brest mass_j_step;
  26.  
  27.     bool p;  //нашел закономерность... Если сортировать по шеллу и ПО КЛЮЧУ то за первый подход
  28.           //массив может отсортироваться не полностью. и поэтому нужно сделать проверку(сортировку) еще раз
  29.          //для этого вводим bool p   и будем делать сортировку до того момента пока не будет равна False
  30.     for (int i = 0; i < kolvo; i++)
  31.     {
  32.         p = false;
  33.         for (int step = n / 2; step >= 1; step /= 2)
  34.         {
  35.             for (int i = step; i < n; i++)
  36.             {
  37.                 for (int j = i - step; j >= 0; j -= step)
  38.                 {
  39.                     fseek(fl, sizeof(train_to_brest) * j, 0);
  40.                     fread(&train, sizeof(train_to_brest), 1, fl);
  41.                     element_j = train.time_to;
  42.                     mass_j = train;
  43.  
  44.  
  45.                     fseek(fl, sizeof(train_to_brest) * (j + step), 0);
  46.                     fread(&train, sizeof(train_to_brest), 1, fl);
  47.                     element_j_step = train.time_to;
  48.                     mass_j_step = train;
  49.  
  50.                     if (element_j > element_j_step)
  51.                     {
  52.                         p = true;
  53.                        
  54.                         fseek(fl, sizeof(train_to_brest) * j, 0);
  55.                         fwrite(&mass_j_step, sizeof(train_to_brest), 1, fl);
  56.  
  57.                         fseek(fl, sizeof(train_to_brest) * (j+step), 0);
  58.                         fwrite(&mass_j, sizeof(train_to_brest), 1, fl);
  59.                        
  60.                     }
  61.                 }
  62.             }
  63.         }
  64.         if (p == true)
  65.         {
  66.             kolvo++;
  67.         }
  68.         else break;
  69.     }
  70.  
  71.     rewind(fl);
  72.  
  73.     cout << endl << endl;
  74.     while (fread(&train, sizeof(train_to_brest), 1, fl) == 1)
  75.     {
  76.         cout << "--------------------------------------------------" << endl;
  77.         cout << "Time_to: " << train.time_to << endl;
  78.         cout << "--------------------------------------------------" << endl;
  79.  
  80.     }
  81.  
  82.  
  83.     fclose(fl);
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement