快速排序

快速排序

import java.util.Arrays;
/**
 * 快速排序基本思路:
 * 先将一组数据分割为独立的两部分, 其中一部分的所有数据比另一部分要小
 * 每一部分运用递归再次进行排序
 * 以此达到有序序列
 * @author Rocco_L
 */
public class QuickSort {
 public static void main(String[] args) {
  int[]  arr = {-9 , 78 , 0 , 23 ,-567 ,70};
  quickSort(arr, 0, arr.length-1);
  System.out.println(Arrays.toString(arr));
 }
/**
  * 
  * @param arr需要排序的数组
  * @param left 左下标
  * @param right右下标
  */
 public static void quickSort(int [] arr, int left, int right){
  int l =left;
  int r =right;
  int pivot =arr[(left+right)/2];
  //while循环目的: 让比pivot小的放到左边
  int temp =0;  //临时变量,作为交换时使用
  while(l<r){
   //找到大于等于pivot值的就退出
   while(arr[l]<pivot){
    l+=1;
   }
   while(arr[r]>pivot){
    r-=1;
   }
   //如果l>=r,说明
   if(l>=r){
    break;
   }
   //交换
   temp = arr[l];
   arr[l] = arr[r];
   arr[r] = temp;
   //交换完后,发现arr[l] == pivot 值 相等   r-- 否则会进入死循环
   if(arr[l] == pivot){
    r-= 1;
   }
   if(arr[r] == pivot){
    l+= 1;
   }
  }
  //如果l == r ,必须 l++ , r-- 否则为出现栈溢出
  if(l == r){
   l +=1;
   r -=1;
  }
  //向左递归
  if(left < r){
   quickSort(arr, left, r);
  }
  if(right  > l){
   quickSort(arr, l, right);
  }
 }

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值