The first attempt written in C ++ iterative algorithm, using pure iterator
void mergeSort (vector <int> :: iterator beg, vector <int> :: iterator end) {// Sort the interval [BEG, End) IF (End - BEG <2) return; Auto + BEG = MID (End - BEG ) / 2; mergesort (BEG, MID); mergesort (MID, End); // === === merge_beg vector <int> A (BEG, MID); // duplicating the first subvector, is configured as an ordered vector to occupy the first subvector auto iter_a = a.begin (), iter_b = mid; // iterator respectively before and after the starting position of a sub-vector auto iter_c = beg; // directed ordered vector starting position while (iter_a < a.end () || iter_b <End) { IF (iter_b> End = || (iter_a <a.end () && * iter_a <iter_b *)) * * = iter_a iter_c ++ ++; IF (iter_a> = a.end () || (iter_b <end && * iter_a>Iter_b = *)) * = * iter_b iter_c ++ ++; } // === === merge_end }