Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void sort_shell() // сортировка по шеллу
- {
- if ((fl = fopen("struct.dat", "rb+")) == NULL)
- {
- cout << "file didn't read" << endl;
- }
- else cout << "file readed GOOD" << endl;
- rewind(fl);
- int n = 0;
- n = _filelength(_fileno(fl)) / sizeof(train_to_brest);
- rewind(fl);
- int count = 0;
- int kolvo = 1;
- int element_j;
- int element_j_step;
- train_to_brest mass_j;
- train_to_brest mass_j_step;
- bool p; //нашел закономерность... Если сортировать по шеллу и ПО КЛЮЧУ то за первый подход
- //массив может отсортироваться не полностью. и поэтому нужно сделать проверку(сортировку) еще раз
- //для этого вводим bool p и будем делать сортировку до того момента пока не будет равна False
- for (int i = 0; i < kolvo; i++)
- {
- p = false;
- for (int step = n / 2; step >= 1; step /= 2)
- {
- for (int i = step; i < n; i++)
- {
- for (int j = i - step; j >= 0; j -= step)
- {
- fseek(fl, sizeof(train_to_brest) * j, 0);
- fread(&train, sizeof(train_to_brest), 1, fl);
- element_j = train.time_to;
- mass_j = train;
- fseek(fl, sizeof(train_to_brest) * (j + step), 0);
- fread(&train, sizeof(train_to_brest), 1, fl);
- element_j_step = train.time_to;
- mass_j_step = train;
- if (element_j > element_j_step)
- {
- p = true;
- fseek(fl, sizeof(train_to_brest) * j, 0);
- fwrite(&mass_j_step, sizeof(train_to_brest), 1, fl);
- fseek(fl, sizeof(train_to_brest) * (j+step), 0);
- fwrite(&mass_j, sizeof(train_to_brest), 1, fl);
- }
- }
- }
- }
- if (p == true)
- {
- kolvo++;
- }
- else break;
- }
- rewind(fl);
- cout << endl << endl;
- while (fread(&train, sizeof(train_to_brest), 1, fl) == 1)
- {
- cout << "--------------------------------------------------" << endl;
- cout << "Time_to: " << train.time_to << endl;
- cout << "--------------------------------------------------" << endl;
- }
- fclose(fl);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement