Scala实现冒泡排序、归并排序和快速排序
1、冒泡排序
def sort(list: List[Int]): List[Int] = list match {case List() => List()case head :: tail => compute(head, sort(tail))}def compute(data: Int, dataSet: List[Int]): List[Int] = dataSet match {case List() => List(data)case head :: tail => if (data <= head) data :: dataSet else head :: compute(data, tail)}def main(args: Array[String]) {val list = List(3, 12, 43, 23, 7, 1, 2, 0)println(sort(list))}
2、归并排序
def mergedSort[T](less: (T, T) => Boolean)(list: List[T]): List[T] = {def merged(xList: List[T], yList: List[T]): List[T] = {(xList, yList) match {case (Nil, _) => yListcase (_, Nil) => xListcase (x :: xTail, y :: yTail) => {if (less(x, y)) x :: merged(xTail, yList)elsey :: merged(xList, yTail)}}}val n = list.length / 2if (n == 0) listelse {val (x, y) = list splitAt nmerged(mergedSort(less)(x), mergedSort(less)(y))}}def main(args: Array[String]) {val list = List(3, 12, 43, 23, 7, 1, 2, 0)println(mergedSort((x: Int, y: Int) => x < y)(list))}
3、快速排序
def quickSort(list: List[Int]): List[Int] = {list match {case Nil => Nilcase List() => List()case head :: tail =>val (left, right) = tail.partition(_ < head)quickSort(left) ::: head :: quickSort(right)}}def main(args: Array[String]) {val list = List(3, 12, 43, 23, 7, 1, 2, 0)println(quickSort(list))}
未完成,待整理
转载于:https://www.cnblogs.com/jchubby/p/5449380.html
Scala实现冒泡排序、归并排序和快速排序相关推荐
- 排序算法--(冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序)
一.时间复杂度分析 - **时间复杂度**:对排序数据的总的操作次数.反应当n变化时,操作次数呈现什么规律 - **空间复杂度**:算法在计算机内执行时所需要的存储空间的容量,它也是数据规模n的函数. ...
- 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...
- 八大排序:冒泡排序、插入排序、希尔排序、选择排序、堆排序、归并排序、快速排序、基数排序
[前言] 所有代码段都以升序为例,数组下标从0开始.排序的稳定性即:任意两个相等的数据,排序前后的相对位置不发生变化. [冒泡排序(Bubble Sort)] 它重复地访问过要排序的元素序列,依次比较 ...
- 排序算法中——归并排序和快速排序
冒泡排序.插入排序.选择排序这三种算法的时间复杂度都为 $O(n^2)$,只适合小规模的数据.今天,我们来认识两种时间复杂度为 $O(nlogn)$ 的排序算法--归并排序(Merge Sort)和快 ...
- 排序算法:归并排序、快速排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.归并排序: 1.工作原理: 归 ...
- 归并排序,快速排序为什么快
对于一个 n n n个元素的数组,必须要确定两两之间的相对顺序,假设每次都抓取不同的二元组,需要 log 2 n ! \log_2n! log2n!次比较,由于 log 2 n ! ≈ n ...
- 排序算法之——归并排序和快速排序
冒泡排序.插入排序.选择排序这三种算法的时间复杂度都为 O ( n 2 ) O(n^2) O(n2),只适合小规模的数据.今天,我们来认识两种时间复杂度为 O ( n l o g n ) O(nlog ...
- 常见排序算法原理及实现——第二部分(归并排序、快速排序、堆排序)
引言 排序算法第一部分,我们聊了冒泡排序.插入排序.选择排序这三种排序算法,它们的时间复杂度比较高,都是 O(n2),适合小规模数据的排序.今天,我们来看三种时间复杂度为 O(nlogn) 的排序算法 ...
- 归并排序、快速排序和堆排序及C代码
排序 1.归并排序 1.1归并排序的概念 1.2算法步骤 1.3代码示例 2.快速排序 2.1快速排序的概念 2.2算法步骤 2.3代码示例 3.堆排序 3.1堆排序的概念 3.2算法步骤 3.3代码 ...
- 算法与数据结构全阶班-左程云版(二)基础阶段之3.归并排序和快速排序
文章目录 前言 1.归并排序 2.快速排序 总结 前言 本文主要介绍了两种排序,归并排序和快速排序,归并排序有递归和非递归2种方式实现,快速排序的升级版为荷兰国旗问题. 1.归并排序 归并排序: 1) ...
最新文章
- 了解黑客的关键工具---揭开Shellcode的神秘面纱
- jupyter代码字体大小_你可能并不知道这样定制炫酷的jupyter主题
- MySQL-MMM架构部署(有图)
- java code viewer_Java CodeView类代码示例
- Solr学习笔记——查询
- 【ZJOF】用来个栈来实现一个队列
- 【LCT】【树状数组】Matches Are Not a Child‘s Play(luogu CF1137F)
- 信息学奥赛一本通 1107:校门外的树 | 1931:【05NOIP普及组】校门外的树 | OpenJudge NOI 1.6 06 | 洛谷 P1047 [NOIP2005 普及组] 校门外的树
- 谷歌方法 pdf txt azw3 epub mobi 百度云盘网盘下载
- 「技术架构」TOGAF建模:环境和位置图
- Java 设计模式 本文代码拉取链接 https://gitlab.com/zhangpengweiLJ/designpettern.git
- 苹果收购公司,为什么总是低调而高效---转自百度新闻|DTCHAT
- java 字符串加密_如何用JAVA实现字符串简单加密解密?
- 各项异性扩散(Anisotropic diffusion)--算法简介(python)代码实现
- mysql workbench6.3.7_mysql workbench官方版
- jstl标签c:choose,c:when,c:otherwise用法
- 塑壳断路器的机械原理
- 网上找到一个可以用来测试网站安全性能的测试ASP页面
- CAN通信波特率与每秒收发帧数
- Microsoft SQL Server--导入excel数据
热门文章
- MongoDB集群——副本集
- ASP.NET母版页和内容页之间如何互相传值?
- iOS6兼容之前版本的旋屏总结
- [转] Asp.net mvc 3 beta 新特性介绍
- linux 文本排序、合并和分割 -转
- 通用Makefile模板
- python典型应用场景、domo及模板之一-----------配置日志
- 分布式时序数据库InfluxDB
- Swift NSDate的一个分类,把Mon Apr 04 19:45:37 +0800 2016这种格式的时间转换为2016-04-04 11:45:37 +0000
- Shadow Map 原理和改进 【转】