java快排

package sort;
/*
 * 快排:
 * 1,以数组中的一个数为坐标点,比坐标点大的数放在右边,小的放在坐标。
 * 2,不断递归1,直到不能递归。
 */

public class QuickSort {

	public static void main(String[] args) {
		int[] arr = {5,6,4,1,7,3,2,9};
		QuickSort quickSort = new QuickSort();
		quickSort.qsort(arr,0,arr.length-1);
		for(int i = 0;i<arr.length;i++) {
			System.out.print(arr[i]);
		}
	}
	
	public void  qsort(int[] arrs,int begin,int end) {
		if(begin>=end||arrs==null)
			return;
		int position = position(arrs,begin,end);
		qsort(arrs,begin,position-1);
		qsort(arrs,position+1,end);
	}
	//重数组的最左边和最右边开始遍历,与坐标点的值进行对比,将数组变成为坐标点的左边比右边小的数组。
	public int position(int[] arrs,int begin,int end) {
		int first = arrs[begin];
		int i = begin;
		int j = end;
		while(i<j) {
			while(first>=arrs[i]&&i<end)
				i++;
			while(first<arrs[j]&&j>begin)
				j--;
			if(i<j) {
				arrs[i] = arrs[i]+arrs[j];
				arrs[j] = arrs[i]-arrs[j];
				arrs[i] =arrs[i]-arrs[j];
			}
			
		}
		//最后移动坐标点
		if(j !=begin) {
			arrs[begin] = arrs[j];
			arrs[j] = first;
		}
		return j;
	}

}

  

posted @ 2019-07-09 16:21  胡叔叔  阅读(205)  评论(0编辑  收藏  举报