排序算法(5)--快速排序QuickSort(非递归实现)

非递归写法

利用栈
主要需要记录起始和结尾即low和high 的值,用循环只能处理一边,所以需要将temp后面的起始和结尾下标记录下来。利用栈来记录(也可以使用队列)。
比如待排序数组为{7,3,9,6,0,15,5,13}
来记录low 和high的值
先入low,最后的是high
逻辑步骤:
假设数组中有n个待排序数字,
1.设置一个low 和一个high
low指向当前待排序数组的最左边的下标
high指向当前待排序数组的最右边的下标
2.设置基准:将0号下标的数字放入temp中间变量中,
3.然后high指针从后往前走依次与基准temp比较,若小于基准temp,则将该数字放入0号下标,
此时,刚才放入0号位的数字位置空缺,然后low指针从前往后然后走,依次与基准temp比较,若有大于基准temp的,放入后面的空格子,
4.重复第3步
5.若low和high相遇,则空缺位置为基准temp的最终位置,将基准放入此处,基准左边的数比基准小,基准右边的数比基准大
6.若左边只有一个数字,则左边已经有序,左边不需要再排序
7.若超过两个数字,将左边的数字根据上面的方法继续划分

快速排序,越有序,越慢,完全有序1,2,3,4,5,6,7,8,9这种情况并不是退化成冒泡排序,而是选择排序,时间复杂度O(n^2)。

猜你喜欢

转载自blog.csdn.net/qq_37895918/article/details/82809506