快速排序的非递归表达 java

今天突然看了看栈,想了想该怎么把快速排序整理成非递归的,于是花了一天的时间才写出来:

 

public int[] quickSort(int[] num) {
		if (num.length < 3)
			return null;
		int start = 0;
		int end = num.length - 1;
		int middle = 0;
		Stack<Integer> index = new Stack<Integer>();
		index.push(start);
		index.push(end);
		while (!index.isEmpty()) {

			end = index.pop();
			start = index.pop();
			int i = start;
			int j = end;
			int pivot = num[i]; // 先挖出来一个坑,为了移动其他数据
			while (i < j) {
				while (i < j && num[j] >= pivot)
					// 大于当前的值不动,遇到小于当前的值,把该值,埋到坑里
					j--;
				num[i] = num[j];
				while (i < j && num[i] <= pivot)
					// 小于当前的值不动,遇到大于标记的值,埋到坑里。
					i++;
				num[j] = num[i];
			}
			num[i] = pivot;
			middle = i;
			if (middle - 1 > start) {
				index.push(start);
				index.push(middle - 1);
			}
			if (middle + 1 < end) {
				index.push(middle + 1);
				index.push(end);
			}
		}
		return num;
	}

 欢迎大家指正

你可能感兴趣的:(快速排序非递归)