Implementing the merge sort with only arrays, out of place
Try not to use using namespace std.
Code within a function should be indented as well.  You already do this with other code blocks, and the same applies to functions.
Just avoid Hungarian notation:

int iArray;


We already know it's an int array.
Prefer not to pass C arrays to functions in C++.  This causes them to decay to a pointer; it does not actually pass the array itself.

Instead, pass in a storage container, such as an std::vector.  Storage containers will not decay to a pointer, and they're more idiomatic C++.

If you have C++11, initialize the vector using list initialization:

std::vector&lt;int&gt; values { 2, 5, 6, 4, 7, 2, 8, 3, 9, 10 };


If you don't have C++11, declare it and call push_back() for each value:

std::vector&lt;int&gt; values;

values.push_back(2);
values.push_back(5);
// ...


Pass it to a function with such parameters:

void merge_sort(std::vector&lt;int&gt; values, int startIndex, int endIndex) {}


As its implementation is that of an array, you can still access its elements with [].  You can also use its iterators (more preferred).

Storage containers do the memory allocation for you, so you will not need new/delete.  It's best to do as little manual memory allocation as possible in C++.