快速排序大体思路:快排就是通过一趟排序将原数据分成两部分,其中一部分关键字都比另一部分小,接下来再对这两部分分别使用快速排序,这里有递归的思想。如下图:
快排分析图第一轮排序完成以后,把数组视为以index为准即小于index和大于index的两组无序的元素,然后继续按照上面的方式,把两边无序的元素进行排序,直到排序完成。上代码:
适用场景:
快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了。因此总的比较和交换次数就少了,速度自然就提高了。当然在最坏的情况下,仍可能是相邻的两个数进行了交换。快所以其适用于数据量大的情况,但是快速排序实现需要很多次对数据位置的操作,这里想一下如果排序之前数据是链式存储的会怎么样?还记得本系列文章开始讲解数组,链表的区别吗?这里,如果链式存储频繁对位置操作效率会下降很多,有大量重复数据的时候,性能同样不好,也就是说快速排序适用于数据量大重复数据少数据是顺序存储结构的情况,不适用与链式存储结构。
网友评论