描述
给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。
您在真实的面试中是否遇到过这个题?
是
样例
给出 [3, 2, 1, 4, 5]
, 排序后的结果为 [1, 2, 3, 4, 5]
。
这里使用了快速排序:
PS:不知道为什么我交换算法使用位运算无法通过,我用VS验证是可以的。
class Solution {
public:
/**
* @param A: an integer array
* @return: nothing
*/
void sortIntegers2(vector<int> &A) {
// write your code here
quickSort(A,0,A.size()-1);
}
void swap(vector<int> &A,int i,int j){//
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
int Partition(vector<int> &A,int left,int right){
int pivot=A[right];
int tail=left-1;
for(int i=left;i<right;i++){
if(A[i]<=pivot){
swap(A,++tail,i);
}
}
swap(A,tail+1,right);
return tail+1;
}
void quickSort(vector<int> &A,int left,int right){
if(left>=right) return;
int pivot_index=Partition(A,left,right);
quickSort(A,left,pivot_index-1);
quickSort(A,pivot_index+1,right);
}
};