描述
给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 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[:]