lintcode练习- 464. 整数排序 II

描述

给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。

您在真实的面试中是否遇到过这个题?  是

样例

给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]

实现代码:

class Solution:
    """
    @param A: an integer array
    @return: nothing
    """
    '''
    def sortIntegers2(self, A):
        # write your code here
        #归并
        if not A:
            return
        self.mergesort(A, 0, len(A) - 1, [0]*len(A))
    
    def mergesort(self, A, start, end, C):
        if start >= end: return
        mid = start+(end-start)//2
        self.mergesort(A, start, mid, C)
        self.mergesort(A, mid+1, end, C)
        self.merge(A, start, end, C)
        return

    def merge(self, A, start, end, C):
        i, mid = start, start+(end-start)//2
        l, r = i, mid+1
        while l <= mid and r <= end:
            if A[l] < A[r]:
                C[i] = A[l]
                l, i = l+1, i+1
            else:
                C[i] = A[r]
                r, i = r+1, i+1
        while l <= mid:
            C[i] = A[l]
            l, i = l+1, i+1
        while r <= end:
            C[i] = A[r]
            r, i = r+1, i+1

        A[start:end+1] = C[start:end+1]
    '''
    '''
    # mothod quick sort
    def sortIntegers2(self, A):
        # write your code here
        if not A:
            return
        self.quicksort(A, 0, len(A)-1)
    
    def quicksort(self, A, start, end):
        if start >= end: return

        pivot = A[start+(end-start)//2]
        l, r = start, end
        while l <= r:
            while l <= r and A[l] < pivot: l+=1
            while l <= r and A[r] > pivot: r-=1
            if l <= r:
                A[l], A[r] = A[r], A[l]
                l, r = l+1, r-1

        self.quicksort(A, start, r)
        self.quicksort(A, l, end)
    '''
    # heap sort 
    def sortIntegers2(self, A):
        from heapq import heappush, heappop
        if not A: return
        heap, copy = [], []
        for i in A: 
            heappush(heap, i)
        while heap: 
            copy.append(heappop(heap))
        A[:] = copy[:]
    
 

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/81390460