JAVA版的快排

不了解的或者有更好方法的欢迎讨论

话不多说,代码奉上:

public class QuickSort {
	public static void main(String[] args){
		//int[] num={1,7,3,88,44,151,88,36,17};
		int[] num={6,88,1,4,83,54,64,19,22};
		for(int i:num)
			System.out.printf("%d ",i);
		System.out.println();
		quicksort(num);
		for(int i:num)
			System.out.printf("%d ",i);
	}
	
	public static void quicksort(int[] num){
		if(num!=null)
			quicksort(num,0,num.length-1);
	}
	
	private static void quicksort(int[] num, int beg, int end) {
		if(beg<end){
			int p=Partition(num,beg,end);	//得出排序一次后标志数的下标
			quicksort(num,beg,p-1);
			quicksort(num,p+1,end);
		}
	}
	private static int Partition(int[] num, int beg, int end) {
		int i=beg+1,j=end;
		int tag=num[beg];	//以第一个数为标志数
		if(beg<end){
			while(true){
				while(num[i]<=tag&&i<end)	//从左开始找到一个比tag大的数
					i++;
				while(num[j]>tag&&j>beg)		//从右开始找到一个比tag小的数
					j--;
				if(i>=j)
					break;
				//用异或将num[i]和num[j]交换
				num[i]=num[i]^num[j];
				num[j]=num[i]^num[j];		//i^j^j=i  此时num[j]就是原num[i]的值
				num[i]=num[i]^num[j];		//i^j^i=j
			}
			//将num[j]和num[beg]交换
			num[beg]=num[j];
			num[j]=tag;		
		}
		return j;
	}
}


猜你喜欢

转载自blog.csdn.net/Software_55White/article/details/72403814