排序算法--快速排序法

package com.maiya;

/**
 * 排序算法--快速排序法
 * 快速排序法通过使用任意选择的分割元素来分割值列,然后递归地对分割元素的任意一端子列进行
 * 排序,从而实现值列的排序。快速排序算法的一般性策略如下:首先,在值列中选择一个元素作为
 * 分割元素,其次分割值列,使分割元素左侧的所有元素都小于它,其右侧的所有元素都大于它。最
 * 后,(递归地)对两个分割部分应用上述的排序策略。
 * @author WHF
 *
 */
public class Sort {
	
	public static void main(String[] args) {
		int[] n={7,18,6,1,8,5,9,15,2,16,3};
		quickSort(n,0,n.length-1);
		for(int i=0;i<n.length;i++){
			System.out.println(n[i]);
		}
	}
	static void quickSort(int[] n,int left,int right){
		if(left<right){
			int pattion=pattion(n,left,right);
			//对临界点左端递归排序
			quickSort(n,left,pattion);
			//对临界点右端递归排序
			quickSort(n,pattion+1,right);
		}
		
	}
	static int pattion(int[] n,int left,int right){
		//记录分割元素,此处以值列的最左端元素为分割元素
		int pivod=n[left];
		//记录分割元素所在索引
		int start=left;
		while(left<right){
			//从右向左查找一个大于分割元素的元素
			while(n[right]>pivod){
				right--;
			}
			//从左向右查找一个小于分割元素的元素
			while(n[left]<=pivod && left<right){
				left++;
			}
			//将寻找到的两个元素交换
			if(left<right){
				int temp=n[left];
				n[left]=n[right];
				n[right]=temp;
			}
		}
		//将分割元素与right索引处(大于分割元素与小于分割元素的临界点)的交换
		int temp=n[right];
		n[right]=pivod;
		n[start]=temp;
		//返回临界点
		return right;
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值