Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <list>
- #include <fstream>
- #include <algorithm>
- #include <iterator>
- #include "merge_sort.h"
- using namespace std;
- void incr(istream_iterator<int> file_iter)
- {
- cout << *++(++file_iter) << endl;
- }
- void merge_sort(istream_iterator<int>& file_iter, istream_iterator<int>& end_of_stream)
- {
- size_t size = distance(file_iter, end_of_stream);
- if (size > 1)
- {
- istream_iterator<int> it(file_iter);
- advance(it, size / 2);
- size_t const left_size = size / 2;
- size_t const right_size = size - left_size;
- merge_sort(file_iter, it);
- merge_sort(++it, end_of_stream);
- size_t lidx = 0, ridx = left_size, idx = 0;
- istream_iterator<int> itl(file_iter); // pointer to left element
- advance(itl, lidx);
- istream_iterator<int> itr(file_iter); // pointer to right element
- advance(itr, ridx);
- istream_iterator<int> itls(file_iter); // pointer to border element
- advance(itls, left_size);
- int* tmp_array = new int[size];
- while (lidx < left_size || ridx < size)
- {
- if (*itl < *itr)
- {
- tmp_array[idx++] = move(*itl);
- lidx++;
- }
- else
- {
- tmp_array[idx++] = move(*itr);
- ridx++;
- }
- if (lidx == left_size)
- {
- copy(itr,
- end_of_stream,
- &tmp_array[idx]);
- break;
- }
- if (ridx == size)
- {
- copy(itl,
- itls,
- &tmp_array[idx]);
- break;
- }
- }
- ofstream fo("forsort.dat");
- ostream_iterator<int> ositer(fo, "\n");
- copy(make_move_iterator(tmp_array), make_move_iterator(&tmp_array[size]), ositer);
- }
- }
- int main()
- {
- ifstream fi("forsort.dat");
- // read data from file
- istream_iterator<int> file_iter(fi);
- istream_iterator<int> end_of_stream;
- //fstream out("forsort.dat", fstream::out);
- /*
- auto it = file_iter;
- for (int k = 0; k < 8; it++, k++)
- cout << *(it) << "\n";
- */
- //cout << *file_iter << endl << *(++file_iter) << endl << *file_iter << endl;
- size_t size = distance(file_iter, end_of_stream);
- cout << size << endl;
- incr(file_iter);
- //merge_sort(file_iter, end_of_stream);
- /*
- list<int> l;
- l.push_back(5);
- l.push_back(5);
- l.push_back(5);
- copy(l.begin(), l.end(), ositer);
- cout << *file_iter << " dist = " << distance(file_iter, end_of_stream) << endl;
- copy(file_iter, end_of_stream, back_inserter(i));
- cout << endl;
- ostream_iterator<int> ositer(cout, " - ");
- copy(i.begin(), i.end(), ositer);
- cout << endl;
- */
- system("PAUSE");
- return 0;
- }
Add Comment
Please, Sign In to add comment