排序:快速排序

算法步骤java

1 从数组中挑出一个元素,称为 “基准”(pivot),如下实例取第一位数组元素为基准数算法

2 从新排序数列,全部元素比基准值小的摆放在基准前面,全部元素比基准值大的摆在基准的后面(相同的数能够到任一边)。在这个分区退出以后,该基准就处于数列的中间位置。这个称为分区(partition)操做。数组

3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。ui

 

public static void quickSort(int[] elements) {
	System.out.println("elements="+Arrays.toString(elements));
	System.out.println("------------------------------------------------");
	split(elements, 0, elements.length-1);
}

private static void split(int[] elements, int left, int right) {
	int baseElement = elements[left];// 基准数
	int l = left;// 记录左边的指针位置
	int r = right;// 记录右边的指针位置
	int temp = 0;
	
	boolean isSmallest = false;// 基准数是数组指定区域内最小的元素标志
	while(l != r) {
		while(l<r && elements[r] >= baseElement) {
			--r;
		}
		if(l == r) {
			isSmallest = true;
			break ;
		}
		while(l<r && elements[l] <= baseElement) {
			++l;
		}
		if(l == r) {
			temp = elements[r];
			elements[r] = baseElement;
			elements[left] = temp;
			split(elements, left, r-1);
			split(elements, l+1, right);
		} else {
			temp = elements[l];
			elements[l] = elements[r];
			elements[r] = temp;
		}
	}
	if(isSmallest) {
		split(elements, left+1, right);
	}
	System.out.println("elements="+Arrays.toString(elements));
	System.out.println("------------------------------------------------");
}

调用方法:指针

public static void main(String[] args) {
	int[] array = {82 ,31 ,29 ,71, 72, 42, 64, 5, 110};
	quickSort(array);
}

执行结果:code

elements=[82, 31, 29, 71, 72, 42, 64, 5, 110]
------------------------------------------------
elements=[5, 29, 31, 71, 72, 42, 64, 82, 110]
------------------------------------------------
elements=[5, 29, 31, 42, 64, 71, 72, 82, 110]
------------------------------------------------
elements=[5, 29, 31, 42, 64, 71, 72, 82, 110]
------------------------------------------------
elements=[5, 29, 31, 42, 64, 71, 72, 82, 110]
------------------------------------------------
elements=[5, 29, 31, 42, 64, 71, 72, 82, 110]
------------------------------------------------
elements=[5, 29, 31, 42, 64, 71, 72, 82, 110]
------------------------------------------------
elements=[5, 29, 31, 42, 64, 71, 72, 82, 110]
------------------------------------------------
elements=[5, 29, 31, 42, 64, 71, 72, 82, 110]
------------------------------------------------
elements=[5, 29, 31, 42, 64, 71, 72, 82, 110]
------------------------------------------------

 

参考页面:htm

http://developer.51cto.com/art/201403/430986.htm排序

https://mp.weixin.qq.com/s/vgpKzmEjuJkhFy-NfpvURQ递归

相关文章
相关标签/搜索