Professional Documents
Culture Documents
* File: 20161004_CPP_L16.cpp.
* Title: 2016-10-04 C++ Lesson 16
* Author: Renato Montes
* Description: Notes for Albert Wei's C++ class
*/
/* Deque */
#include <deque>
//essentially the same as a vector, except you can add at the beginning
// and remove from the beginning
//array to be sorted:
{3,2,7,6,8}
//queue of vectors: merge and push_back
{3,2,7,6,8}
{7,6,8,{2,3}} //merged 2 and 3 pushed them back
{8,{2,3},{6,7}}
//thus this is the non-recursive version of mergesort, as a loop
/* * pair */
//to use a pair, include the following:
#include <utility>
//but note <utility> is included in a lot of headers, e.g. Map
pair<vector<int>, vector<int>>
split(const vector<int>& v) { //precondition: !v.empty()
//we'll use v[0] as a pivot for quicksort:
pair<vector<int>, vector<int>> result;
for (vector<int>::size_type i = 1; i < v.size(); i++)
if (v[i] < v[0]) //use v[0] as pivot
result.first.push_back(v[i]);
else
result.second.push_back(v[i]);
return result;
}
vector<int>
operator+(const vector<int>& v1, const vector<int>& v2) {
vector<int> result(v1); //calls copy ctor
result.insert(result.end(), v2.begin(), v2.end());
//remember: insert takes a position and a range specified by two iterators
return result;
vector<int>
qsort(const vector<int>& v) {
//base case:
if (v.size() <= 1)
return v;
auto p = split(v);
return qsort(p.first) + vector<int>(1, v[0]) + qsort(p.second);
}