java快速排序(注释详细)

时间复杂度:O(n*logn)
public static void quickSort(int[] nums,int m,int n){
if(m<n){
int i = split(nums,m,n);//找到经过一次划分后KEY的位置
quickSort(nums,m,i-1);//对KEY左边再次划分为两部分
quickSort(nums,i+1,n);//对KEY右边再次划分
}
}
public static int split(int[] nums,int m,int n){
int right,left,key;
left = m;
right =n;
key = nums[left];
while(left < right){
//从最右边开始扫描 如果找不到比key小的 就一直往左找
while((left<right)&&(nums[right]>key)){
right--;
}
//找到比KEY小的,跳出循环,交换高低位的值
nums[left] = nums[right];

//从左边开始扫描 如果找不到比key大的 就一直往右找
while((left<right)&&(nums[left]<key)){
left++;
}
//找到比KEY大的,跳出循环,交换高低位的值
nums[right] = nums[left];
}
nums[left] = key;//一次划分结束后把KEY复制给LEFT = RIGHT位置,左边的都比KEY小,右边的都比KEY大
return left;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值