数据结构与算法-----交换排序-----快速排序

package jzoffer;

public class QuickSortLisiming {
	public static void main(String[] args) {
		int [] a = {5,2,8,4,22,31,0,1,9};
		int start = 0;
		int end   = a.length-1;
		System.out.println("原数组如下:");
		new QuickSortLisiming().printList(a);
		System.out.println("经过快速排序后的数组如下:");
		new QuickSortLisiming().QuickSort(start,end,a);
	}
	private  void printList(int [] a){
		for(int i =0;i<a.length;i++){
			System.out.print(a[i]+" ");
		}
		System.out.println("");
	}
	private  void QuickSort(int left,int right,int [] a){
		int temp = a[left];
		int i = left; //创建一个左边的小人i
		int j = right;//创建一个右边的小人j
		if(i>j){
			return;//特殊情况判断,说明数组不合法,直接返回
		}
		while(i < j){//i=j说明两个小人相遇了,我们一趟排序就完成了
			while(a[j]>=temp && i<j){ //原谅我没加等号,从上一道题一直看到现在5:38,我想哭,哇
				j--;//这个是右边的小人向左边移动
			}
			while(a[i]<=temp && i<j){
				i++;
			}
				int t = a[i];
				a[i] = a[j];
				a[j] = t;	
		}
		 //改变基准数(交换到a[i]位置),当然这里写a[i]或者a[j]都可以
		int t = a[i];
		a[i] = a[left];
		a[left] = t;
		printList(a);
		QuickSort(left,i-1,a);//因为基准数最终回到了最中间i,所以我们递归左边就是(lefe,i-1)
		QuickSort(i+1,right,a);//右边就是(i+1,right)
	}
}

猜你喜欢

转载自blog.csdn.net/lsm18829224913/article/details/80331524