     }
 
     // initialize permutation to [0, 1, 2, ... ,N-1]
-    thrust::host_vector<int> permutation(N);
+    thrust::device_vector<int> permutation(N);
     thrust::sequence(permutation.begin(), permutation.end());
 
     // sort from least significant key to most significant keys


    // Note: keys have not been modified
    // Note: permutation now maps unsorted keys to sorted order
    
    std::cout << "Sorted Keys" << std::endl;
    for(size_t i = 0; i < N; i++)
    {
        // p is the index in the *unsorted* arrays of the i-th sorted element
        int p = permutation[i];
        std::cout << "(" << upper[p] << "," << middle[p] << "," << lower[p] << ")" << std::endl;
    }

    return 0;
}

#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/generate.h>
#include <thrust/sequence.h>
#include <thrust/sort.h>
