自下而上归并排序 数组实现

 

void mergeSort(int a[], int len)
{
    int *temp = new int[len];
    int gap = 1;
    while (gap < len) {
        for (int i = 0; i < len; i += gap * 2)
        {
            int mid = i + gap > len - 1 ? len : i + gap;
            int end = mid + gap > len - 1 ? len : mid + gap;
            int j = i;
            int k = mid;
            int cur = i;
            while (j != mid && k != end)
            {
                if (a[j] < a[k])
                    temp[cur++] = a[j++];
                else
                    temp[cur++] = a[k++];
            }
            while (j != mid)
                temp[cur++] = a[j++];
            while (k != end)
                temp[cur++] = a[k++];
        }    
        for (int i = 0; i < len; ++i)
            a[i] = temp[i];
        gap = gap << 1;
    }    
    delete[] temp;
}

 

posted @ 2016-01-08 14:58  sdlwlxf  阅读(373)  评论(0编辑  收藏  举报