搜索
您的当前位置:首页正文

力扣算法:快速排序

来源:爱go旅游网

力扣算法:

给你一个整数数组 nums,请你将该数组升序排列。

示例 1:

输入:nums = [5,2,3,1]
输出:[1,2,3,5]
示例 2:

输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]

提示:

1 <= nums.length <= 50000
-50000 <= nums[i] <= 50000
代码
void quicksort(int* Nums, int left, int right){
if(left<right){
int i=left,j=right,temp=Nums[left];
while(i!=j){
while(i<j&&Nums[j]>temp)
j–;
if(i<j)
Nums[i++]=Nums[j];
while(i<j&&Nums[i]<temp)
i++;
if(i<j)
Nums[j–]=Nums[i];
}
Nums[i]=temp;//
quicksort(Nums,left,i-1);
quicksort(Nums,i+1,right);

}

}
int* sortArray(int* nums, int numsSize, int* returnSize){
*returnSize=numsSize;
quicksort(nums,0,numsSize-1);
return nums;
}

写一个快速排序的算法,利用分治法的思想。轩泽最左边的数作为基准数,想j从右向左寻找比基准数大的数,再i从右向左寻找比基准数小的数,将两个数交换位置,接着寻找,最后当i=j时,将该元素与基准数交换,这样将一组数分为两个区间,左区间都比基准数小,右区间都比基准数大。再把左边和右边分别看成两个单独的模块,再重新选基准数,重新重复上述步骤即递归调用。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top