有些文章不一定是为了上首页投稿

快排,堆排序介绍

2019-04-29  本文已影响3人  jsbintask

快速排序

image image

首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序

最好情况:每次划分过程产生的区间大小都为n/2,一共需要划分log2n次,每次需要比较n-1次,O(nlog2n)
最坏情况:每次划分过程产生的两个区间分别包含n-1个元素和1个元素,一共需要划分n-1次,每次最多交换n-1次,这就是冒泡排序了,O(n2)

堆排序

  1. 根据初始数组去构造初始堆(构建一个完全二叉树,保证所有的父结点都比它的孩子结点数值大)。
  2. 每次交换第一个和最后一个元素,输出最后一个元素(最大值),然后把剩下元素重新调整为大根堆。
image image

堆排序过程的最好和最坏时间复杂度是O(nlog2n)

TOP K

如何在N个元素中寻找前K大的数?

快速排序:

堆排序:

上一篇下一篇

猜你喜欢

热点阅读