重新理解快速排序

简介: 重新理解快速排序

QuickSort

QuickSort 版本一

依据

QuickSort版本一其实是依据 ‘荷兰国旗问题' 实现的。只不过这次划分时只有大于或者小于num的数。


思路

  1. 取数组最右的数作为num,划分为两个区域(大于、小于)
  2. 在两个区域里重复第一部操作


QuickSort 版本二

依据

QuickSort版本二就是实打实的依据 ‘荷兰国旗问题' 实现的。


思路

  1. 取数组最右的数作为num,划分为两个区域(大于、小于,等于)
  2. 在两个(大于、小于)区域里重复第一部操作


QuickSort 版本三

思考

版本一和版本二本质差不多,版本二较版本一的优化并没有多少。

之前一直考虑的情况都是能够分出三个部分,但如果只能分出两个部分(大于和等于、小于和等于)

/******假如给一个数组[1,2,3,4,5,6,7,8,9]******/

[1,2,3,4,5,6,7,8,]9]

[1,2,3,4,5,6,7,]8,9]

[1,2,3,4,5,6,]7,8,9]

           .

           .

           .


由于每次只能往一个区域进行递归,最后的时间复杂度也只能是0(N^2).


思路

  1. 随机取数组中的一个数作为num,与最右数交换,划分区域(大于、小于、等于)
  2. 在两个区域里重复第一部操作


总结

最后版本的时间复杂度也只能依靠概率来决定了,版本三的依据依旧是荷兰国旗问题

目录
相关文章
快速排序
快速排序。
118 35
|
8月前
|
搜索推荐 C++
C++快速排序的实现
C++快速排序的实现
|
8月前
|
算法
快速排序(三)——hoare法
快速排序(三)——hoare法
84 1
|
算法 搜索推荐
快速排序到底有多快
快速排序到底有多快
97 0
|
机器学习/深度学习
785. 快速排序
785. 快速排序
75 0
【1. 快速排序】
思路: > 1. 确定分界点:q[l] , q[(1 + r)/2] , q[r] , 随机 > 2. 调整区间的范围:使得在`分界点左侧是数都<= x`, `分界点右侧的数都>= x `(`重点处理`)
95 0
【1. 快速排序】
|
C语言
快速排序就这么简单
从前面已经讲解了冒泡排序、选择排序、插入排序了,本章主要讲解的是快速排序,希望大家看完能够理解并手写出快速排序的代码,然后就通过面试了!如果我写得有错误的地方也请大家在评论下指出。
144 0
快速排序就这么简单
|
搜索推荐 C++
快速排序(C++实现)
一、快速排序的基本实现 快速排序算法是一种基于交换的高效的排序算法,它采用了分治法的思想: 1、从数列中取出一个数作为基准数(枢轴,pivot)。 2、将数组进行划分(partition),将比基准数大的元素都移至枢轴右边,将小于等于基准数的元素都移至枢轴左边。 3、再对左右的子区间重复第二步的划分操作,直至每个子区间只有一个元素。 快排最重要的一步就是划分了。划分的过程用通俗的语言讲就是“挖坑”和“填坑”。
466 0

热门文章

最新文章