2011年6月26日星期日

Merge Sort

void mergeSort(int *sortedArr, int start, int end)
{
    if(start == end)
    {
        return;
    }
   
    int mid = (int)((start + end) / 2);
    mergeSort(sortedArr, start, mid);
    mergeSort(sortedArr, mid + 1, end );
    int *tempArr = new int[end - start + 1];
    int i = start;
    int j = mid + 1;
    int k = 0;
    while(i <= mid && j <= end)
    {
        if(sortedArr[i] < sortedArr[j])
        {
            tempArr[k] = sortedArr[i];
            i++; k++;
        }
        else
        {
            tempArr[k] = sortedArr[j];
            j++; k++;
        }
    }
    if(i == mid + 1)
    {
        for(; j <= end; j++, k++)
            tempArr[k] = sortedArr[j];
    }
    else
    {
        for(; i <= mid; i++, k++)
            tempArr[k] = sortedArr[i];
    }
    k = 0;
    for(int i = start; i <= end; i++, k++)
        sortedArr[i] = tempArr[k];
    delete[] tempArr;
}

没有评论:

发表评论