快速排序的简单实现

       排序是日常开发中一种常见的操作,也就是对一个数列按照某种规则进行排列,下面介绍一种速度快,效率高的排序算法——快速排序
       快排的实现方式是在数列中选一个作为基准数,一般是第一个或者最后一个,然后将数列中的数一一与基数作比较分成两部分,左边比基数小,右边比基数大(这是升序,降序的话左边大,右边小),最后对左右两边分别重复上面步骤,直到两边的数列都只有一个元素或没有元素,排序结束。
       举个具体例子来看一下,有一个数组{4,3,6,5,7,2,1,8}

       第一步:选一个数为基准数(base),这里选第一个,a[0] = 4,再定义两个指针,一个在最左边(蓝色箭头),一个在最右边(橙色箭头),向中间扫描。如图

快速排序的简单实现

       第二步:右边指针向左扫描与基数比较,当扫描到的元素比基数小时(比基数大的不动),将右指针所对应的元素赋值给左指针对应的元素(8不动,1赋值给左指针),这时右指针移动到1的位置,停止扫描(比基数小的放做左边).

快速排序的简单实现

       第三步:左指针向右扫描,当扫描到的元素比基数大时(比基数小的不动),将左指针对应的元素赋值给右指针对应的元素(3不动,6赋值给右指针),这时左指针移动到6的位置,停止扫描(比基数大的放右边).

快速排序的简单实现

       第四步:重复二、三步骤,直到两个指针相碰,过程图如下

快速排序的简单实现


快速排序的简单实现

快速排序的简单实现

        到这一步可以看到左右指针相碰,然后将基数值4赋值给相碰的位置,这时候一趟排序完毕,可以看到左边都是比基数4小的数,右边都是比基数大的数,下图是经过一趟排序完毕后的数列,再对左右两边数列分别重复一二三四步骤,直到两边的数列都只有一个元素或没有元素,排序结束。

快速排序的简单实现

  最后附上具体代码和注释(注释写的比较详细)

快速排序的简单实现

快速排序的简单实现

代码运行效果

快速排序的简单实现