赞
踩
快速排序(Quicksort),又称划分交换排序(partition-exchange sort),简称快排。它的原理和冒泡排序法一样都是用交换的方式,不过他会在数据中找到一个虚拟的中间值,把小于中间值的数据放在左边,把大于中间值的数据放在右边,再以同样的方式分别处理两边的数据,直到完成排序为止。
28 6 40 2 60 9 58 16 47 20
为例演示一下这个过程:1)先将第一个数字的索引设置为per,将其复制一份到tmp临时变量中,再设置low为这个数的索引,high为最后一个数的索引;
2)由high位置开始从后往前查找,发现high对应的值20小于per对应的值28,故将其复制到low的位置
3)接着从low位置开始由前往后查找,20和6都小于per对应的值28,继续向前查找,直到找到大于28的数字40,将40放到high的位置;
4)再从high位置往前查找,找到小于per对应的值28的数字16,将其放到low的位置;
5)由low位置开始由前往后查找,找到大于per对应的值28的数字63,将其放到high的位置;
6)由high位置开始由后往前查找,找到小于per对应的值28的数字9,将其放到low的位置;
7)继续从low位置开始从前往后查找,走了一步之后就发现low与high的位置重合,此时将tmp中存储的值28放入该位置,2此时8的最终位置确定,它前面的数字都小于它,后面的数字都大于它,第一轮排序完成;
8)开始递归的处理28左右两侧的子序列,同上边的步骤一样,先将20放入tmp,从后往前比较后将9放到low位置;
9)从low位置往后查找,发现这个序列中的数字都小与per对应的值20,直到与high相遇,将tmp中的值放到相遇的位置,20的最终位置确定,再处理其左侧的子序列;
10)过程不再详述,20左侧子序列处理后的的结果为:
10)由于这次的基准值9右侧只有一个数字,所以不用再做处理,左侧有两个数字,再进行一次处理,结果为:
11)再对第一次的基准值28右侧的子序列进行排序,过程不再详述,剩余步骤每次的结果为:
至此,数组完全有序,快速排序完成。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。