归并排序C++

#include <iostream>
using namespace std;

void merge(int a[], int low, int mid, int high){
    int BSize = mid - low;
    int CSize = high - mid;
    int* A = a + low;
    int* B = new int[BSize];
    for(int i=0; i<BSize; ++i){
        B[i] = A[i];
    }
    int* C = a + mid;
    int i = 0, j = 0, k = 0;
    while(j<BSize && k<CSize){
        if(B[j]<C[k])//谁小就将谁放入A中 
            A[i++] = B[j++];
        else
            A[i++] = C[k++];
    } 
    //将剩余的全部添加到A中 
    if(j==BSize){
        for(; k<CSize; ++k){
            A[i++] = C[k++];
        }
    }
    else{
        for(; j<BSize; ++j){
            A[i++] = B[j++];
        }
    }
    delete[] B;
}

void mergeSort(int a[], int low, int high){
    //归并排序,求数组a[low, high)的升序 
    int size = high - low;
    if(size==1){
        return;//只有一个元素,直接返回 
    }
    int mid = (high+low)/2;
    mergeSort(a, low, mid);//递归求a[low, mid)排序 
    mergeSort(a, mid, high);//递归求a[mid, high)排序 
    merge(a, low, mid, high);//归并 
}

int main(){
    int a[6] = {5, 3, 1, 10, 6, -1};
    mergeSort(a, 0, 6);
    for(int i=0; i<6; ++i){
        cout << a[i] << endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/vaemusicsky/article/details/81349950