数组(五)--快速排序

快速排序(Quicksort)是对 冒泡排序的一种改进。
它的基本思想是:
一趟快速排序的算法是:
1)设置两个变量i、j, 排序 开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给 key ,即 key =A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于 key 的值A[j],将A[j]和A[i]互换;

4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;

5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。


public class Demo9 {
	public static void main(String[] args){
		int[] arr={4,2,9,3,5,8,7,1,6};
		int start=0;
		int end=arr.length-1;
		quickSort(arr,start,end);
		printArray(arr);
	}
	
	public static void quickSort(int[] arr,int low,int high){
		int start=low;
		int end=high;
		int key=arr[low];
		while(start<end){
			//从后往前开始比较
			while(end>start && arr[end]>=key)//如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较
				end--;
			if(arr[end]<=key){
				int temp=arr[end];
				arr[end]=arr[start];
				arr[start]=temp;
			}
			//从前往后比较
			while(end>start && arr[start]<=key)//如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置,然后又从后往前比较
				start++;
			if(arr[start]>=key){
				int temp=arr[start];
				arr[start]=arr[end];
				arr[end]=temp;	
			}
		//此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用
		}
		//递归
		if(start>low) 
			quickSort(arr,low,start-1);
		if(start<high) 
			quickSort(arr,end+1,high);
				
	}
	
	//打印数组
		public static void printArray(int[] arr){
			System.out.print("[");
			for(int i=0;i<arr.length;i++){
				if(i!=arr.length-1)
					System.out.print(arr[i]+" ");
				else
					System.out.print(arr[i]+"]");
			}
		}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值