常用nlogn排序算法

归并排序算法

`c++

#include

// 归并排序
void __merge(int arr[],int l,int mid,int r) {

// int aux[r-l+1];
int *aux = new int[r-l+1];

// 复制aux数组
for (int i = l; i <= r; i++) {

    aux[i-l] = arr[i];
}
// 对比下标 i,j k
int i = l,j = mid + 1;
for (int k=l;k<=r;k++) {

    // 判断索引越界
    if (i > mid) {

        arr[k] = aux[j-l];
        j++;
    } else if (j > r) {
        arr[k] = aux[i-l];
        i++;
    } else if (aux[i-l] > aux[j-l]) { // 比较两边下表索引
        arr[k] = aux[j-l];
        j++;
    } else {
        arr[k] = aux[i-l];
        i++;
    }
}

delete []aux;

}

void __mergeSort(int arr[],int l,int r) {

if (l >= r) {
    return;
}

int mid = (l+r) / 2;

// 递归 把数组分成 单个元素
__mergeSort(arr,l,mid);
__mergeSort(arr,mid+1,r);
__merge(arr,l,mid,r);

}

void mergeSort(int arr[],int n) {

__mergeSort(arr,0,n-1);

}

int main(int argc, char const *argv[]) {

int arr[] = {3,5,2};
mergeSort(arr,3);
for (int i=0; i<3; i++) {
    printf("%dn",arr[i]);
}

return 0;

}