问题描述:给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。
样例:给出 [3, 2, 1, 4, 5]
, 排序后的结果为 [1, 2, 3, 4, 5]
。
实现思路:我选用了快速排序,快速排序是一个递归的过程。首先我选择了第一个值为轴值,然后写Partition函数将待排记录划分成独立的两部分,左侧记录的关键码均小于或等于轴值,右侧记录的关键码均大于或等于轴值。然后利用递归方法分别对这两部分重复上述过程,直到整个序列有序。
实现代码:
class Solution {
public:
/**
* @param A an integer array
* @return void
*/
void sortIntegers2(vector<int>& A) {
// Write your code here
Quicksort(A,0,A.size()-1);
}
int Partition(vector<int>& A,int first,int end)
{
int i=first,j=end,povit=A[first];
while(i<j)
{
while(i<j&&A[i]<=A[j]) j--;
if(i<j)
{
swap(A[i],A[j]);
i++;
}
while(i<j&&A[i]<=A[j]) i++;
if(i<j)
{
swap(A[j],A[i]);
}
}
}
void Quicksort(vector<int>& A,int first,int end)
{
if(first<end){
int povit=Partition(A,first,end);
Quicksort(A,first,povit-1);
Quicksort(A,povit+1,end);
}
}
};
做题感想:用了课本上的方法,设置了两个参数i,j分别用来指示将要与轴值记录进行比较的左侧记录位置和右侧记录位置。老师讲了只设置一个参数,虽然写起来更简单,但是自己还是觉着书上的理解起来好点。