归并排序(笔记)

#include <iostream>
#include <string.h>
#include <cstdio>
using namespace std;

void _merge(int* arr,int L,int M,int R){
    int leftSize = M-L+1;
    int rightSize  = R-M;
    int left[leftSize];
    int right[rightSize];
    for(int i=L;i<=M;i++){
        left[i-L] = arr[i];
    }
    for(int i=M+1;i<=R;i++){
        right[i-M-1] = arr[i];
    }

    int i = 0,j = 0,k = L;
    while(i<leftSize && j<rightSize){
        if(left[i]<right[j]){
            arr[k] = left[i];
            i++; k++;
        }else{
            arr[k] = right[j];
            j++; k++;
        }
    }
    while(i<leftSize){
        arr[k] = left[i];
        k++; i++;
    }
    while(j<rightSize){
        arr[k] = right[j];
        k++; j++;
    }
}

void mergeSort(int* arr, int L, int R){
    if(L==R)
        return;
    int M = (L+R)/2;
    mergeSort(arr,L,M);
    mergeSort(arr,M+1,R);
    _merge(arr,L,M,R);
}


void solve(){
    int arr[10] = {99,340,110,50,5600,800000,0,9,11111,2222222};
    int length = 10;
//归并排序 mergeSort(arr,0,length-1); for(int i=0;i<length;i++) printf("%d ",arr[i]); } int main() { solve(); return 0; }

  

posted @ 2020-04-22 15:42  xiongbing  阅读(90)  评论(0)    收藏  举报