快速排序

 

/**
 * 快速排序:是对冒泡排序的改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,
 * 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
 *
 * 找出a[0]放置的位置(也就是两部分的中间)
 */
public class QuickSort {

 int arr[] ={2,1,5,4,8,23,20,2443,2342,343342,9000,22,4,54,3,20000};
 
 public static void main(String[] args) {
  
  QuickSort qs=new QuickSort();
  int low=0; //固定为0
  int high=qs.arr.length-1; //数组的长度-1
  
  qs.quickSort(low, high);
  
  for(int i=0;i<qs.arr.length;i++){
   System.out.print(qs.arr[i]+" ");
  }
 }
 /**
  * 找出两部分分隔点
  * @param low  固定值0
  * @param high
  * @return
  */
 int mid(int low,int high){
  int val=arr[low];

  while(low<high){
   while(low<high && val<=arr[high])
    high--;
    arr[low]=arr[high];
   while(low<high && val>=arr[low])//注意>与>=区别,为什么此处arr[low]与arr[high]会产生不一样的结果?
    low++;
    arr[high]=arr[low];
  }
  arr[low]=val;
  return low;
 }
 
 /**
  * 快速排序算法
  * @param low 
  * @param high
  */
 void quickSort(int low,int high){
  if(low<high){//如果没有low<high,java.lang.StackOverflowError
   int middle=mid(low, high);//(1)数组右边的比左边的大,两部分中间点middle
   quickSort(low,middle);
   quickSort(middle+1,high);
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值