java快速排序

快速排序的原理

       在一个数组中,选择一个key,通过一次排序将数组分为两组,大于key的放在左边,小于key的放在key的右边

  • 取i j i为这个数组的起始  j为数组的长度-1
  • 取key 为 arr[i]
  • 当i<j时,从左边开始取大于key的数,从右边开始取小于key的数   将他们交换位置
  • 重置key  将key与a[i]交换位置
  • key左边的和右边的分别再次进行
    //传入一个数组
    	public static void quickSort(int []a){
    		//0和a.length-1分别代表数组的起始和结束的标识
    		if(a.length>0){
    			quickSort(a,0,a.length-1);
    		}
    	}
    	
    	public static void quickSort(int []a,int low,int hight){
    		
    		if(low>hight){
    			return;
    		}
    		int i=low;
    		int j=hight;
    		int key=a[low];
    		//当i=j时 退出循环
    		while(i<j){
    			//从右往左找到第一个小于key的
    			while(i<j && a[j]>key){
    				j--;
    			}
    			while(i<j && a[i]<=key){
    				i++;
    			}
    			//交换两个数的位置
    			if(i<j){
    				int tmp=a[i];
    				a[i]=a[j];
    				a[j]=tmp;
    			}
    		}
    		//调整key的位置  将a[i]和key交换
    		int tmp=a[i];
    		a[i]=a[low];
    		a[low]=tmp;
    		
    		//对key左边的数进行快速排序
    		quickSort(a,low,i-1);
    		//对key右边的数进行快排
    		quickSort(a, i+1, hight);
    		
    	}
    递柜快速排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值