问题:
给一组整数,请将其在原地按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。
样例:
例1:
输入:[3,2,1,4,5], 输出:[1,2,3,4,5]。
例2:
输入:[2,3,1], 输出:[1,2,3]。
python:(不能通过lintcode的测试!!!)
class Solution:
"""
@param A: an integer array
@return: nothing
"""
def mergeInt(self, left, right):
result = []
while left and right:
if left[0] <= right[0]:
result.append(left[0])
del left[0]
else:
result.append(right[0])
del right[0]
if left:
result += left
if right:
result += right
return result
def sortIntegers2(self, A):
# write your code here
if len(A) <= 1:
return A
mid = len(A)//2
left = A[:mid]
right = A[mid:]
left = self.sortIntegers2(left)
right = self.sortIntegers2(right)
return self.mergeInt(left, right)
C++:
class Solution {
public:
/**
* @param A: an integer array
* @return: nothing
*/
void merge(vector<int> &result, vector<int> &left, vector<int> &right)
{
int lenLeft = left.size();
int lenRight = right.size();
int pL = 0;
int pR = 0;
while(pL < lenLeft && pR < lenRight)
{
if(left[pL] < right[pR])
{
result.push_back(left[pL++]);
}else{
result.push_back(right[pR++]);
}
}
while(pL < lenLeft)
{
result.push_back(left[pL++]);
}
while(pR < lenRight)
{
result.push_back(right[pR++]);
}
}
void sortIntegers2(vector<int> &A) {
// write your code here
int lenA = A.size();
if(lenA <= 1)
{
return;
}
vector<int> left;
vector<int> right;
for(int i = 0; i < lenA; i++)
{
if(i < lenA/2)
{
left.push_back(A[i]);
}else{
right.push_back(A[i]);
}
}
sortIntegers2(left);
sortIntegers2(right);
A.clear();
merge(A, left, right);
}
};
PS:用的是归并排序
PS:python版本一直测试不过,但是在其他IDE已经没有问题了。我自己觉得代码没问题,谁如果能发现问题请告知!