快速排序法

/**
 * 快速排序法
 * 其时间复杂度为O(NlogN)
 * @author Sailing
 *
 */
public class QuickSort {
	static int [] intArray = {9,4,3,7,2,9,1,3,8,5};
	
	public static void quicksort(int left,int right){
		//设置递归出口
		if(left>right){
			return;
		}
		//假设这个序列 最左端的数为基准数
		int temp = intArray[left];
		//假想两个'检测者',前面的检测者用于检测不小于基准数数字,如果不满足就一直往后检测,直到满足条件,暂停检测;
		//后面的检测者用于检测不大于基准数的数字,如果不满足就一直向前检测,直到满足条件,暂停检测
		int i = left;
		int j = right;
		//只要前后两个移动的 '检测者' 没有相遇,就不会和基准数交换位置
		while(i!=j){
			while(intArray[j]>=temp&&i<j){
				j--;
			}
			while(intArray[i]<=temp&&i<j){
				i++;
			}
			//只要前后两个移动的 '检测者' 没有相遇,交换此时它们所在的位置的数字
			if(i<j){
				int t = intArray[i];
				intArray[i] = intArray[j];
				intArray[j] = t;
			}
		}
		//如果前后两个移动的 '检测者'相遇,此时和基准数交换位置
		intArray[left] = intArray[i];
		intArray[i] = temp;
		//递归接着排序前半部分和后半部分
		quicksort(left,i-1);
		quicksort(i+1, right);
	}
	public static void main(String[] args) {
		int length = intArray.length;
		for(int k=0;k<length;k++){
			System.out.print(intArray[k]+" ");
		}
		System.out.println();
		quicksort(0, length-1);
		for(int k=0;k<length;k++){
			System.out.print(intArray[k]+" ");
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值