merge sort

来源:互联网 发布:君何以知燕王翻译 编辑:程序博客网 时间:2024/06/10 15:36

三大排序方法之一:

merge sort

Given an integer array, sort it in ascending order. Use selection sort, bubble sort, insertion sort or any O(n2) algorithm.

java

public class Solution {    /*     * @param A: an integer array     * @return:      */    public void sortIntegers(int[] A) {        // write your code here        if (A == null || A.length == 0) {            return;        }        sort(A, 0, A.length - 1, new int[A.length]);    }    private void sort(int[] A, int start, int end, int[] temp) {        if (start >= end) {            return;        }        int mid = (start + end) / 2;        sort(A, start, mid, temp);        sort(A, mid + 1, end, temp);        merge(A, start, end, temp);    }    private void merge(int[] A, int start, int end, int[] temp) {        int mid = (start + end) / 2;        int index = start;        int left = start;        int right = mid + 1;        while (left <= mid && right <= end) {            if (A[left] < A[right]) {                temp[index++] = A[left++];            } else {                temp[index++] = A[right++];            }        }        while (left <= mid) {            temp[index++] = A[left++];        }        while (right <= end) {            temp[index++] = A[right++];        }        for (int i = start; i <= end; i++){            A[i] = temp[i];        }    }}

python

class Solution:    """    @param: A: an integer array    @return:     """    def sortIntegers(self, A):        # write your code here        if A is None or len(A) == 0:            return        self.sortx(A, 0, len(A) - 1, [0] * len(A))        def sortx(self, A, start, end, temp):        if start >= end:            return        mid = (start + end) / 2        self.sortx(A, start, mid, temp)        self.sortx(A, mid + 1, end, temp)        self.merge(A, start, end, temp)            def merge(self, A, start, end, temp):        mid = (start + end) / 2        left = start        right = mid + 1        index = start        while left <= mid and right <= end:            if A[left] < A[right]:                temp[index] = A[left]                index += 1                left += 1            else:                temp[index] = A[right]                index += 1                right += 1        while left <= mid:            temp[index] = A[left]            index += 1            left += 1        while right <= end:            temp[index] = A[right]            index += 1            right += 1        for i in range(start, end + 1):            A[i] = temp[i]