前面3种排序算法都是简单的排序,效率不高,这里给出一个稍微复杂一点的排序算法,归并排序。分为两步,一是划分待排序数据,二是归并划分的子序列,归并排序是一个递归过程。
template <class T>
void merge(T *Array, int First, int Mid, int Last)
{
T *temp = new T[Last - First + 1];
assert(temp != NULL);
int indexA = First;
int indexB = Mid + 1;
int indexT = 0;

while (indexA <= Mid && indexB <= Last)
temp[indexT++] = (Array[indexA] < Array[indexB]) ? Array[indexA++] : Array[indexB++];

while (indexA <= Mid)
temp[indexT++] = Array[indexA++];

while (indexB <= Last)
temp[indexT++] = Array[indexB++];

indexA = First;
for (indexT = 0; indexT <= Last-First; indexT++, indexA++)
Array[indexA] = temp[indexT];

delete [] temp;
}

template <class T>
void merge_sort(T *Array, int First, int Last)
{
int mid;

if (First < Last)
{
mid = (First + Last) / 2;
merge_sort(Array, First, mid);
merge_sort(Array, mid+1, Last);
merge(Array, First, mid, Last);
}
}






































