快速排序

2019-05-20  本文已影响0人  灰世界

快速排序 

基本思想 :  1. 选取数组中 最后一个元素 , 通过遍历, 将大于和小于的元素交换到, 该元素的左右两侧 ; 2. 接着将两侧的元素, 通过上述的方法进行递归处理, 直至 递归到一个元素;

实现思路: 在start元素上 , 设置两个游标 (i ,j).  分如下三种情况, 对游标进行移动 :

       1. 如果该元素 大于 最后一个元素 , 将 j 游标往后移动一位;

       2. 当该元素 小于 最有一个元素时 , 两个游标在同一个位置 ,则将 j, 和 i 位置的元素 同时后移动一位;

       3. 当该元素 小于 最有一个元素时 , 两个游标不在一个位置 ,则将 j, 和 i 位置的元素 进行交换位置后,同时后移动一个位置;

如图 :

思路流程图

代码实现 :

实现代码


时间复杂度:  最坏: O(n2) , 平均: O(nlogn)


空间复杂度: 上面方法是原地排序 O(1)


核心总结 :  1. 递归     2. 分区   主要是原地排序的分区

上一篇下一篇

猜你喜欢

热点阅读