zoukankan      html  css  js  c++  java
  • 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)
    苟利国家生死以, 岂因祸福避趋之
  • 相关阅读:
    chrome 修改请求头的小工具
    spring boot整合shiro引用配置文件配置是出现的问题
    jquery ztree 复选框
    表单input中disabled提交后得不到值的解决办法
    大文件编辑器
    记一次差点删库跑路的事故
    简单的记录一次简单的优化
    mysql 死锁解决办法
    centos6,7中防火墙基本用法
    案例3-ubuntu和centos中自动部署tomcat相关服务的脚本
  • 原文地址:https://www.cnblogs.com/chintsai/p/11829239.html
Copyright © 2011-2022 走看看