全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  大数据学习笔记  >  详情

手写算法-四大排序

来源:千锋教育
发布人:qyf
2022-12-08

推荐

在线提问>>

手写算法-四大排序

  速度上:改良的归并排序算法是n-nlogn,快速排序的时间复杂度是nlogn-n^2.冒泡和选择都是n^2.

  稳定性:快速、选择都不稳定,冒泡和归并都稳定

  空间上:冒泡和选择都是1.快速为logn,归并为n

  /**

  * 一个完整的快速排序的方法

  * 可以传入任意类型的buffer对其排序后返回

  * 可以传入一个比较器对自定义类型排序

  *

  * @author 孤星魅影

  * @param buffer 任意类型的buffer

  * @param isASC 是否正序排序

  * @param ev 自定义比较器

  * @return 返回一个快速排序后的buffer

  */

  def quickSort[T: ClassTag](buffer: mutable.Buffer[T])(implicit isASC: Boolean = true, ev: T => Comparable[T]): mutable.Buffer[T] = {

  //为null、为空、长度为1时都返回buffer

  if (buffer == null || buffer.length <= 1)

  return buffer

  //1.将数组的第一个数head与后面所有的数进行比较,左边放比head小的数,右边放比head大的数(从小到大)

  //2.递归执行拆分,直到数组只剩下1个

  //3.按顺序将左、中、右三者拼接起来,完成排序

  val (left, right) = buffer.tail.partition(t => {

  if (isASC) t.compareTo(buffer.head) < 0

  else t.compareTo(buffer.head) > 0

  })

  quickSort(left) += buffer.head ++= quickSort(right)

  }

相关文章

大数据之什么是数仓

2022-12-08

手写算法-懒汉式单例

2022-12-08

手写算法-四大排序

2022-12-08

是一个宽表好还是多个维表好?

2022-12-08

数据库和数据仓库的区别是什么?

2022-12-08

“未知”的数据对数据分析和可视化有什么影响?好处和坏处是什么?

2022-12-08
在线咨询 免费试学 教程领取