递归实现快速排序

 快速排序思路(挖坑法):

  1. 选取数组最左边或最右边值作为key值,指定数组第一个元素为left,倒数第二个为right。
  2. 比较 array[left] 与key,若是array[left] > key,则left指向该元素,若array[left] < key,则使left++,直至找出比left大的值。
  3. 比较 array[right] 与key,若是 array[right] < key,则right指向该元素,若 array[right]  > key,则使right++,直至找出比right小的值。
  4. 交换 array[left] 与 array[right] 的值,使left,right各自++。
  5. 当left >= right时,交换 array[left] 与 key 的值。
  6. 这样一次完成后,最大值array[left] 被放在了最后一个位置,而key值的位置就是排序完成后所在的位置,问题分为对前后两个数组进行快速排序,递归结束条件是当数组只有一个元素时退出。

下图是完成一趟排序的导图:

 代码如下:

public class Test{
	public static void main(String[] args){
		int[] array ={4,1,7,6,9,2,8,0,3,5};
        int i=0;
		for(i=0;i<array.length;i++){
			System.out.print(i+" ");
		}
		quickSort(array,0,array.length-1);
		System.out.println();
		for(i=0;i<array.length;i++){
			System.out.print(i+" ");
		}
	}
	public static int change (int[] array,int left,int right){
		int key = array[right-1];
		int tmp=0;
		while(left < right){
			while(array[left] < key){
			left++;
		    }
		    while(array[right-1] > key){
			right--;
		    }
		    tmp = array[left];
		    array[left] = array[right];
		    array[right] = tmp;
		}
		tmp = array[left];
		array[left] = key;
		key = tmp;
		return left;
	}
	public static void quickSort(int[] array,int left,int right){
		if(left < right){
			int mid = change(array,left,right);
			quickSort(array,left,mid-1);
			quickSort(array,mid+1,right);
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值