咱们从后向前看,前面的元素有没有比后面小的?有,谁?1 么,那 1 应该和谁换,应 该和比 1 大的最小的那个进行交换, 那这个数是谁?是 2, 那就换吧, 换完的结果是{2,4,1}, 这个结果和咱们的目标有一点点差别,就是 1 和 4 的位置有差别,咱们的目标是{2,1,4},可 是中间结果是{2,4,1},那很容易啊,不就是把刚才中间结果中的 1 和 4 换一下就 OK 了。 问题在于:为嘛要换呢? 回到咱们的目标上,咱们想找一个数,比 142 稍微大一点点的数,不是找一个比 142 大很多的数,在得到全排列的过程,其实是一个将数组的元素从升序更改到降序的过程,如 果没有完全排好的话, 那么一定有左侧元素小于右侧元素的现象, 在找到的左侧元素的右边 一定是已经降序排列的, 要找一个比当前数大的数, 那可以将找到的左侧元素和右侧序列中 的一个元素进行交换, 以达到比原数大的效果, 可是选哪个元素呢?只能选一个比左侧元素 还大的元素交换过去才能比原来的数大, 那么这样交换完成的数的确比原来的数大; 但是不 是仅仅大于原来的数吗?呵呵,难说,因为左侧元素的右侧已经以降序的方式排列,那么它 们组成的数字肯定不是较小的数字, 而是较大的数字, 怎么能让这个数字是个比原数稍微大 一点点的数呢?