归并排序实现

#include "stdafx.h"
#include <iostream>
#include<vector>
using namespace std;
void merge(int *a, int start, int mid, int end)
{
    int i = start;
    int j = mid + 1;
    int k = 0;
    int *temp = new int[end - start + 1];
    while (i <= mid&&j<=end)
    {
        if (a[i] <= a[j])
            temp[k++] = a[i++];
        else
            temp[k++] = a[j++];         
    }
    while (i <= mid)
        temp[k++] = a[i++];
    while (j <= end)
        temp[k++] = a[j++];
    for (int i = 0; i < k; i++)
        a[start + i] = temp[i];
    delete[]temp;
}
void mergesort(int *a, int start, int end)
{
    if (a == nullptr || start >= end)
        return;
    int mid = (start + end) / 2;
    mergesort(a, start, mid);
    mergesort(a, mid + 1, end);
    merge(a, start, mid, end);

}
int main()
{
    int a[] = { 3,5,6,87,4,2,56,7,3,4,5,6,4,2,45,23 };
    mergesort(a, 0, 15);
    for (int i = 0; i < 16; i++)
        cout << a[i] << endl;
    return 0;
}

参考http://blog.csdn.net/liangzhaoyang1/article/details/50909623

你可能感兴趣的:(归并排序实现)