快速排序非递归用队列实现
第一次写博客,写的不是太好,但不是我邢标吹牛耐心看保证你会!!!!
① 先了解快排原理:
假设有一个数组 6 2 1 7 9 3 4 5 8 10
1.先找一个数作为参考对象,为了方便,就以数组的第一个元素作为参考对象,所以6就是参考对象。
2.设立两个哨兵i,j,指向参考对象的后一个元素 ,j指向即将排序序列的最后一个元素(如果不太理解的话可以参考下面的图)
好!现在开始进行快速排序的第一轮,以6为参考对象,j先往前移动,直到找到比6小的元素停止,随后i往后找,直到找到比6大的元素停止(注意:一定要先移动j,在移动i)
①:j 找到了5 比 6 小停止了,i 找到了 7 比 6 大 停止了,随后将 7 和 5 交换。如图:
交换完之后:
②:交换完之后发现 j 指向 7,而 7 大于 6 ,i 指向 5 ,而 5小于 6,所以 j 要继续往前找,i要继续往后找,j 移动之后找到了 4小于6 停止,i 找到了 9 大于 6 停止,把 4 和 9进行交换。如图:
交换后: