蓝桥杯2012java组决赛(快速排序)

	static void f(int[] x, int left, int right)
	{
		if(left >= right) return;	
		int key = x[(left+right)/2];	
		int li = left;
		int ri = right;
		while(li<=ri){
			while(x[ri]>key) ri--;
			while(x[li]<key) li++;
			
			if(li<=ri){    //填空
				int t = x[li];
				x[li] = x[ri];
				x[ri] = t;
				li++;
				ri--;
			}	
		}
		if(li < right) f(x, li, right);
		if(ri > left) f(x, left, ri);
	}

与普通快排不同,他的基准可以选择任意位置
下面自己实现的快排

public static int QuikSortOnce(int []arr,int left,int right){
	
	int x = arr[left];//确定基准
	while(left<right)//如果left!=right说明没排玩 如果left == right说明找到了中间位置
	{
		while(left<right&&arr[right]>x) right--;
		System.out.println("right:"+right);
		if(left<right){
			arr[left] = arr[right];
			left++;
		}
		while(left<right&&arr[left]<x) left++;
		System.out.println("left:"+left);
		if(left<right){
			arr[right] = arr[left];
			right--;			
		}
	}
		arr[left] = x;	
		return left;
}
	public static void QuickSort(int arr[],int left,int right){
		if(left<right){
			int pos = QuikSortOnce(arr, left, right);
			QuickSort(arr, left, pos-1);
			QuickSort(arr, pos+1,right);
		}
	}
	public static void main(String[] args) {
		int arr [] = new int []{2334,354,6345,6124,871,62,51};
		QuickSort(arr, 0, arr.length-1);
		System.out.println(Arrays.toString(arr));
		
	}

猜你喜欢

转载自blog.csdn.net/weixin_43752167/article/details/92617759