public static void sortColors(int[] nums,int left,int right) {
//这里是终止条件
if(nums.length==0||left>=right)return;
if(right-left==1)
{
if(nums[left]>nums[right])
{
int temp=nums[left];
nums[left]=nums[right];
nums[right]=temp;
return;
}
}
int temp,l=left,r=right;
//从三个数上选出最中间的那个数
ArrayList<Integer>arr=new ArrayList();
arr.add(nums[left]);
arr.add(nums[right]);
arr.add(nums[(right+left)/2]);
Collections.sort(arr);
int x=arr.get(1);
进行三指针排序
int i;
for(i=left;i<=r;i++)
{
while(i<=r&&nums[i]>x)
{
temp=nums[i];
nums[i]=nums[r];
nums[r]=temp;
r--;
}
if(i<=r&&nums[i]<x)
{
temp=nums[i];
nums[i]=nums[l];
nums[l]=temp;
l++;
}
}
sortColors(nums,left,l-1);
sortColors(nums,r+1,right);
}
leetcode上学的快排,比教科书上教的适应性更广
最新推荐文章于 2024-03-17 20:24:56 发布