今天突然看了看栈,想了想该怎么把快速排序整理成非递归的,于是花了一天的时间才写出来:
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; }
欢迎大家指正