快速排序

      快速排序本质上是把一个数组分为两个数组,然后递归调用自身来为每一个子数组进行快速排序来实现的,又称划分排序,是一个递归的过程。

 

	public class QuickSort{
	/**
	 * @param data 要排序的数组
	 * @param left 左边数组下标
	 * @param right 右边数组下标
	 */
	static void quickSort(int[] data, int left, int right){
		if(left<right){
			// 一趟排序算法, 返回枢钮位置
			int pivot = partition(data, left, right);
			// 左边排序
			quickSort(data, left, pivot-1);
			// 右边排序
			quickSort(data, pivot+1, right);
		}
	}
	
	/**
	 * 一趟快速排序算法
	 * 将记录数组data分成两部分,left为起始下标,right为结束下标 
	 * @param data
	 * @param left
	 * @param rightt
	 * @return 枢钮位置
	 */
	static int partition(int[] data, int left, int right){
		int key = data[left];
		int temp;
		
		while(left < right){
			// 从右边开始,第一个小于Key的元素与Key交换位置
			while(left<right && data[right]>=key)
				right--;
			
			//交换元素位置
			temp = data[right];
			data[right] = data[left];
			data[left] = temp;
			
			// 从左边开始,第一个大于Key的元素与Key交换位置
			while(left<right && data[left]<=key)
				left++;
			
			//交换元素位置
			temp = data[right];
			data[right] = data[left];
			data[left] = temp;
		}
		
		return left;
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int data[] = {44,22,2,32,54,22,88,77,99,11,3,98,101,23,834,11,23,53,18};
		quickSort(data, 0, data.length-1);
		for(int i=0;i<data.length;i++){
			System.out.print(" "+data[i]);
		}
	}
}

附快速排序算法图一张,希望能对理解快速排序有帮助: 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值