原理:选取一个数,使得这个数的左边比这个数小,右边的数比这个数大。
接下来的问题是如果实现这个过程。
第一种用栈做
用栈做就太简单了。
直接锁定1。
从3开始往后找。
找到小的数,直接插入到1的前面。
再对每一部分进行递归。
这里是找到了 0 0,新序列是 0 0 1 3 6 2 8 4 8
接下来就是 0 0里找
再是3 6 2 8 4 8里找。
。。。
这里用List模拟的栈
// 136284008List实现太轻松了 void calculate(List<Integer> list, int startIndex, int endIndex) { // origin index 0 size-1 if (startIndex == endIndex || startIndex + 1 == endIndex) { return; } int firstNum =