Java实现快速排序算法


public class 快速排序 {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		int [] a = {2,8,7,1,3,5,6,4};
		show(a);
		quickSort(a,0,a.length-1);
		show(a);
	}
	
	public static void show(int []a)
	{
		for(int i:a)
		{
			System.out.print(i+" ");
		}
		System.out.println();
	}
	
	public static void quickSort(int []a,int p,int r)
	{
		if(p<r)
		{
			int q=partition(a,p,r); //此处将数组分成两部分,一部分比基值小,一部分比基值大
			quickSort(a,p,q-1);  //对基值小的部分用同样的方式处理,指导只剩一个数据
			quickSort(a,q+1,r);//对基值大的部分用同样的方式处理,指导只剩一个数据
		}
	}
	
	public static int partition(int []a,int p,int r)
	{
		int x=a[r]; //x是基值,通常选最后一个数据
		int i=p-1;  //i是指向小于基值的最后一个数据,初始为空,所以是第一个数的前一个
		
		for(int j=p;j<r;j++) //从第一个到倒数第2个数进行排序,最后一个数是基值不用参与,
			                 //j用来指向参与比较的数据,也是大于基值的最后一个数据的后一个位置
		{
			if(a[j]<=x){  //如果当前数比基值小,则i移动到后面一个位置(也就是当前比基值大的第一个数据的位置),
				          //并将j指向的数据(也就是比基值小的数据)换到i的位置。
				i++;			
				int t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
		}
		//当所有数都归位后,剩下的i+1的位置就是基值的位置,将i+1的数据和r位置的数据进行交换即可。
		int t = a[i+1];
		a[i+1]=a[r];
		a[r] = t;
		return i+1; //i+1就是基值的位置,为下一步的划分做准备。
	}

}

结果:
2 8 7 1 3 5 6 4
1 2 3 4 5 6 7 8

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值