快速排序的递归实现

6 篇文章 0 订阅

当主元为数组最后一个元素时的实现:

package offer.giveme;
//实现算法导论上的快速排序方法
public class QuickSort {
	public int partition(int[] num,int low,int high){
		//分割方法,将数组的最后一个元素作为主元。
        //low为当前需划分子数组的下界,high为上界
		int i=low-1;
		int j=low;//i为已经比较完成的小于主元的部分的右边界,j指向待比较元素
		int x=num[high];//主元

		for(;j<high;j++){
			if(num[j]<=x){
				i++;
				exchange(num,i,j);//与大于主元的第一个元素交换,小于主元部分长度增加一
			}
		}
		exchange(num,high,i+1);//最后将主元与大宇主元部分的第一个元素交换位置
		return i+1;
	}
	public void quickSort(int[] num,int low,int high){
		if(low<high){
			int q=partition(num,low,high);
			quickSort(num,low,q-1);
			quickSort(num,q+1,high);
		}
	}
    public void exchange(int[] num,int i,int j){
    	int temp;
    	temp=num[i];
    	num[i]=num[j];
    	num[j]=temp;
    }
	public static void main(String[] args) {
		
        int[] num={8,7,1,3,5,6,4};
        new QuickSort().quickSort(num, 0, 6);
        for(int a:num)
        {
        	System.out.print(a+" ");
        }
	}

}




主元为数组第一个元素时的实现:

package offer.giveme;
//实现当主元在第一个元素时的快速排序
public class QuickSort2 {
	public int partition(int[] num,int low,int high){
		int x=num[low];
		int i=low;
		int j=high;
		while(i<j){
			while(i<j&&num[j]>=x)
				--j;
			num[i]=num[j];
			while(i<j&&num[i]<=x)
				++i;
			num[j]=num[i];
		}
		num[i]=x;
		return i;
	}
	public void quickSort(int[] num,int low,int high){
		if(low<high){
			int q=partition(num,low,high);
			quickSort(num,low,q-1);
			quickSort(num,q+1,high);
		}
	}
	public void exchange(int[] num,int i,int j){
		int temp;
		temp=num[i];
		num[i]=num[j];
		num[j]=num[i];
	}
  
	
	public static void main(String[] args) {
		int[] num={3,6,5,1,12,3,4,10};
		new QuickSort2().quickSort(num, 0, 7);
		for(int a:num){
			System.out.print(a+" ");
		}
		

	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值