Question: Is it possible to sort objects using the Thrust library?
I have the following struct:

```
struct OB{
  int N;
  Cls *C; //CLS is another struct.
}

```

Is it possible to use thrust in order to sort an array of OB according to N? Can you provide a simple example on using thrust to sort objects? If thrust is not able to do so, is there any other CUDA libraries that allows me to do so?

Answer: 
Even though you may sort the objects by using special struct definitions, using a struct as functor, it will make thrust to change the sort algorithm from radix-sort to merge-sort. Speed of radix-sort is noticeably faster than merge-sort. So when using thrust, try to use integer types as key values as possible.

I may suggest you using "thrust::sory\_by\_key(..)" function.

You should change your struct from AOS to SOA structure.

```
struct OB{
  int N;
  Cls *C; //CLS is another struct.
}

```

to

```
struct OBs{
   int []Ns; -> thrust::device_vector<int> indices;
   Cls *C[]; -> thrust::device_vector<Cls> values;
}

```

When you sort the indices with sort\_by\_key, the values will already be sorted.

```
thrust::sort_by_key(indices.begin(), indices.end(), values.begin());

```
I have not tried **Thrust** yet, but there is a similar sort function in [CUDPP](http://code.google.com/p/cudpp/) called **cudppSort**. You cannot directly sort structures using cudppSort, it can only handle integers or floats.

So, one way to sort array of structures is to sort the keys (of your structure) and an index array of values along with it. Later, use the sorted index array to move the structures to their final sorted locations. I have described how to do this for the cudppCompact compaction algorithm in a blog post [here](http://choorucode.wordpress.com/2011/03/09/cudpp-compacting-a-structure-array/). The technique should be similar for cudppSort too.