Merge Sort in Java, C,C++ and Python

public class MergeSort {
    public static void main(String[] args) {
        int[] a = {4, 6, 8, 4, 22, 65, 3, 75, 2, 5, 7, 85, 3, 2};
        mergeSort(a, 0, a.length - 1);
        for (int i : a)
            System.out.print(i + " ");
    }

    public static void merge(int[] a, int p, int q, int r) {
        int n1 = q - p + 1;
        int n2 = r - q;

        int i = 0;
        int j = 0;

        int[] left = new int[n1 + 1];
        int[] right = new int[n2 + 1];

        // create new int arrays, namely array left and array right
        for (; i < n1; i++)
            left[i] = a[p + i];
        for (; j < n2; j++)
            right[j] = a[q + j + 1];

        left[n1] = Integer.MAX_VALUE;
        right[n2] = Integer.MAX_VALUE;

        i = 0;
        j = 0;

        for (int k = p; k <= r; k++) {
            if (left[i] < right[j]) {
                a[k] = left[i];
                i++;
            } else {
                a[k] = right[j];
                j++;
            }
        }
    }

    public static void mergeSort(int[] a, int p, int r) {
        if (p < r) {
            int q = (p + r) / 2;
            mergeSort(a, p, q);
            mergeSort(a, q + 1, r);
            merge(a, p, q, r);
        }
    }
}
#include <stdio.h>
#include <limits.h>

void merge(int a[], int p, int q, int r);

void mergeSort(int a[], int p, int r);

int main(void) {
    int a[] = {54, 7465, 243, 3, 22, 6, 7, 8, 65, 234, 1, 8, 65, 4, 345};
    int length = sizeof(a) / sizeof(*a);
    mergeSort(a, 0, length);
    for (int i = 0; i < length; i++)
        printf("%d ", a[i]);
    return 0;
}

void merge(int a[], int p, int q, int r) {
    int n1 = q - p + 1;
    int n2 = r - q;

    int i = 0;
    int j = 0;

    int left[n1 + 1];
    int right[n2 + 1];

    // create new int arrays, namely array left and array right
    for (; i < n1; i++)
        left[i] = a[p + i];
    for (; j < n2; j++)
        right[j] = a[q + j + 1];

    left[n1] = INT_MAX;
    right[n2] = INT_MAX;

    i = 0;
    j = 0;

    for (int k = p; k <= r; k++) {
        if (left[i] < right[j]) {
            a[k] = left[i];
            i++;
        } else {
            a[k] = right[j];
            j++;
        }
    }
}

void mergeSort(int a[], int p, int r) {
    if (p < r) {
        int q = (p + r) / 2;
        mergeSort(a, p, q);
        mergeSort(a, q + 1, r);
        merge(a, p, q, r);
    }
}
#include <iostream>
#include <limits.h>

using namespace std;

void merge(int a[], int p, int q, int r);

void mergeSort(int a[], int p, int r);

int main() {
    int a[] = {4, 6, 8, 4, 22, 65, 3, 75, 2, 5, 7, 85, 3, 2};
    mergeSort(a, 0, sizeof(a) / sizeof(*a) - 1);
    for (int i : a)
        cout << i << " ";
    return 0;
}


void merge(int a[], int p, int q, int r) {
    int n1 = q - p + 1;
    int n2 = r - q;

    int i = 0;
    int j = 0;

    int left[n1 + 1];
    int right[n2 + 1];

    // create new int arrays, namely array left and array right
    for (; i < n1; i++)
        left[i] = a[p + i];
    for (; j < n2; j++)
        right[j] = a[q + j + 1];

    left[n1] = INT_MAX;
    right[n2] = INT_MAX;

    i = 0;
    j = 0;

    for (int k = p; k <= r; k++) {
        if (left[i] < right[j]) {
            a[k] = left[i];
            i++;
        } else {
            a[k] = right[j];
            j++;
        }
    }
}

void mergeSort(int a[], int p, int r) {
    if (p < r) {
        int q = (p + r) / 2;
        mergeSort(a, p, q);
        mergeSort(a, q + 1, r);
        merge(a, p, q, r);
    }
}
def mergeSort(alist):
    print("Splitting ", alist)
    if len(alist) > 1:
        mid = len(alist) // 2
        lefthalf = alist[:mid]
        righthalf = alist[mid:]

        mergeSort(lefthalf)
        mergeSort(righthalf)

        i = 0
        j = 0
        k = 0
        while i < len(lefthalf) and j < len(righthalf):
            if lefthalf[i] < righthalf[j]:
                alist[k] = lefthalf[i]
                i = i + 1
            else:
                alist[k] = righthalf[j]
                j = j + 1
            k = k + 1

        while i < len(lefthalf):
            alist[k] = lefthalf[i]
            i = i + 1
            k = k + 1

        while j < len(righthalf):
            alist[k] = righthalf[j]
            j = j + 1
            k = k + 1
    print("Merging ", alist)


array = [54, 26, 93, 17, 77, 31, 44, 55, 20]
mergeSort(array)
print(array)
苟利国家生死以, 岂因祸福避趋之
原文地址:https://www.cnblogs.com/chintsai/p/11829239.html