我去网上查看了快速排序的代码,千篇一律,代码简直一个模子里面印出来的,这样没意思,用的都是别人的思路。于是我自己动手写了一个,虽然代码不够简洁,但是我觉得排序的目的应该达到了
快速排序算法无非就是利用左右两个指针,向左或者向右遍历数组,并且与基准点比较,从而达到排序的目的 首先: 假设我们的无序数列是:5,11,1,2,8,6,9 然后声明两个int变量i和j,然后我们让 i 和 j 分别指向数组的两端,第一次遍历的话,i=0,j=6,基准点为5。 之后我再声明一个int类型的变量step,当step=0时,代表由右向左遍历数组,当step=1时,代表从左向右遍历数组。
开始: i=0 , j=6,step=0,基准点为5 第一次寻找: j=6,所以 j 指向9,step=0,所以由右向左遍历,因为9>5,所以我们让 j–,直到找到小于5的数,当 j=3的时候,指向的2小于5,则让2替代以 i 为索引的数,然后将step置为1,这时无序数组为:2,11,1,2,8,6,9 ,各个参数为 i=0 , j=3 ,step=1
第二次寻找: 由于step=1,所以由左向右遍历,我们让 i++,直到找到第一个比5大的数,所以在 i=1的时候,找到11比5大,则让 11 替代以 j 为索引的数,之后将step置为0,这时无序数组为:2,11,1,11,8,6,9 ,各个参数为 i=1 , j=3 ,step=0
第三次寻找: step=0,所以由右向左遍历,让 j–,直到找到小于5的数,当j=2的时候,找到1 小于5,所以让 1 替代以 i 为索引的数,之后将step置为1,这时无序数组为:2,1,1,11,8,6,9 ,各个参数为 i=1 , j=2 ,step=1
第四次寻找: 由于 i=1 , j=2 所以没有遍历的必要了,我们将5直接替代 以 j 为索引的数,所以无序数组为:2,1,5,11,8,6,9 这时我们发现,5左边都是比他小的数,右边都是比他大的数。
最后: 我们利用递归,对5左边和右边的数执行快速排序就行了。