快排算法的Java实现

版权声明:如需转载,请附上原文链接即可 https://blog.csdn.net/doujinlong1/article/details/85261574

快排算法的Java实现

快排的核心是找到在无序数组中找到一个数,然后将比他小的数字放在他的左边,比他大的数字放在他的右边。然后递归的对左右两边进行继续排序,直到完成,下面看算法的实现:

public static void sort(int a[], int start, int end) {

	if (start >= end) {
		return;
	}
	//获取到已经排好序的数字,左边数字都比他小,右边都比他大。
	int flag = getFlag(a, start, end);
	sort(a, start, flag - 1);
	sort(a, flag + 1, end);

}

private static int getFlag(int[] a, int start, int end) {
	int begin = start;
	int over = end;
	//选取第一个为目标数字。
	int num = a[start];
	int flag = start;

	while (begin < over) {
		//从左找到第一个比目标数字大的。
		while (begin < end && a[begin] <= num){begin++;} 
		//从右找到第一个比目标数字小的。			
		while (over > start&& a[over] >= num){over--;}
		//如果begin小于end且值大于,则交互两个数字。
		if(begin < over&&a[begin] > a[over]) swap(a, begin, over);
	}
	//交换目标数字与上面循环完的数字的位置。
	swap(a, over, flag);
	return over;
}

private static void swap(int[] a, int begin, int end) {
	int temp = a[begin];
	a[begin] = a[end];
	a[end] = temp;
}

猜你喜欢

转载自blog.csdn.net/doujinlong1/article/details/85261574