PHP 快速排序
掌握快速排序的原理
基本思想是:采用分而治之的思想,把一段将要排序的数组分割成两部分进行排序,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,然后整个过程可以采用递归的方法实现,直到完成全部排序。
下面展示一些 内联代码片
。
//php代码
class Solution {
/**
* @param Integer[] $nums
* @return Integer[]
*/
function sortArray($nums) {
$count=count($nums);
if($count<=1) return $nums;
$middle=$nums[0]; //设置基准点
$leftarray=$rightarray=array();
for($i=1;$i<$count;$i++){
if($nums[$i]<$middle){ //小于等于基准点放左边
$leftarray[]=$nums[$i];
}
else{
$rightarray[]=$nums[$i]; //大于等于基准点放在右边
}
}
$leftarray=$this->sortArray($leftarray); //递归 对左部分进行排序
$rightarray=$this->sortArray($rightarray);
return array_merge($leftarray,array($middle),$rightarray); //整合
}
}
//C++ 伪代码 可行亲测有效 如果出了bug再参考一下下面的代码
QUICKSORT(A,p,r)
if p<r
mid=PARTITION(A,p,r)
QUICKSORT(A,p,mid-1)
QUICKSORT(A,mid+1,r)
PARTITION(A,p,r)
x=A[p]
i=p
j=r
while(i!=j)
while(j>i&&A[j]>x)
j--
while(i<j&&A[i]<=x)
i++
if(i!=j)
exchange(A[i],A[j])
exchange(A[i],A[p])
return i
//C++ 快速排序
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
quicksort(nums, 0, (int)nums.size() - 1);
return nums;
}
void quicksort(vector<int>& nums,int left,int right){
if(left<right){
int mid=partition(nums,left,right);
quicksort(nums,left,mid-1);
quicksort(nums,mid+1,right);
}
}
int partition(vector<int>& nums,int left,int right){
int x=nums[left];
int i=left;
int j=right;
while(i!=j){
while(j>i&&nums[j]>x){
j--;
}
while(j>i&&nums[i]<=x){
i++;
}
if(i!=j){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
int temp=nums[i];
nums[i]=nums[left];
nums[left]=temp;
return i;
}
};