compare函数c语言,sort(compare)方法
@无所不能的风:
js中reduce、every、map这些api是吸收了FP(函数式编程)的优点引入的,这些api有一个特点,就是将函数名作为变量传入到函数中,这些函数有个专业名词叫高阶函数
函数名也是可以作为变量的,如果你学过C语言,可以类比函数指针,它跟var i = 1这种的区别在于它指向的是一个函数,函数一般是有参数的(无参可以看成是有参的特例),所以函数变量是不完整的,需要在运行时传入参数
回到sort上来,我们来自己实现一个冒泡排序方法
function bubbleSort(arr){
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
// 顺序:如果前一个数大于后一个数,则交换
if(arr[j] > arr[j + 1]){
const temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
}
const array = [1, 10, 5, 2, 6, 9, 8]
bubbleSort(array)
console.log(array)
// Output: [1, 2, 5, 6, 8, 9, 10]
上面是顺序,如果需要倒序,则要将大于改成小于,其它不变。根据IoC控制反转思想,这种变化应该交给调用者。现在就变成了如何抽象这个if条件,它的输入是两个变量(分别是数组的前后两个元素),输出是一个bool,这正好可以用一个bool compare(n1, n2)函数来表示,所以可以改造成如下:
// 顺序比较
function orderedCompare(n1, n2){
return n1 > n2
}
// 倒序比较
function reversedCompare(n1, n2){
return n1 < n2
}
function bubbleSort(arr, compare){
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
if(compare(arr[j], arr[j + 1])){
const temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
}
const array = [1, 10, 5, 2, 6, 9, 8]
bubbleSort(array, reversedCompare)
console.log(array)
// Output: [10, 9, 8, 6, 5, 2, 1]
上面的compare函数也可以用ES6箭头函数来代替简化。
大概就是这样了。
compare函数c语言,sort(compare)方法相关推荐
- r语言 tunerf函数_R语言︱常用统计方法包 机器学习包(名称、简介)
一.一些函数包大汇总 转载于:http://www.dataguru.cn/thread-116761-1-1.html 时间上有点过期,下面的资料供大家参考 基本的R包已经实现了传统多元统计的很多功 ...
- c语言sort函数从小到大排序指针,sort排序是从小到大
java数组排序问题:array.sort()是从小到大排序,别告诉我从i=a.length开始打印然后i.因为数组没变啊,只是打印顺序变Integer [] array=new Integer[]{ ...
- c语言sort函数包,qsort函数、sort函数【转】
http://blog.163.com/yuhua_kui/blog/static/9679964420142195442766/ 先说明一下:qsort和sort,只能对连续内存的数据进行排序,像链 ...
- POJ1256 (C++ compare函数)
问题: 有一个只含大小写字母的字符串,给出所有该字符串的排列,以字典顺序输出.其中 'A'<'a'<'B'<'b'<...<'Z'<'z'. 方法: 只需调用C++ ...
- compare用法java_Java中的Compare和Comparator的使用方法
Java中的Compare和Comparator的使用方法 发布时间:2020-05-23 09:24:06 来源:亿速云 阅读:358 作者:Leah 如何使用Java中的Compare和Compa ...
- C++中字符串的比较,compare()函数
字符串可以和类型相同的字符串相比较,也可以和具有同样字符类型的数组比较. Basic_string 类模板既提供了 >.<.==.>=.<=.!= 等比较运算符,还提供了 c ...
- R语言层次聚类(hierarchical clustering):数据缩放、PCA聚类结果可视化、fpc包的clusterboot函数通过bootstrap重采样的方法评估hclust层次聚类的稳定性
R语言层次聚类(hierarchical clustering):数据缩放.PCA聚类结果可视化.fpc包的clusterboot函数通过bootstrap重采样的方法评估hclust层次聚类的稳定性 ...
- R语言Kmeans聚类、抽取聚类簇:fpc包clusterboot函数通过bootstrap重采样的方法评估Kmeans聚类的稳定性、fpc包的kmeansruns函数通过CH准则和ASW获取最优K值
R语言Kmeans聚类.抽取聚类簇:fpc包的clusterboot函数通过bootstrap重采样的方法评估Kmeans聚类的稳定性.fpc包的kmeansruns函数通过Calinski-Hara ...
- Python语言学习之lambda:lambda函数的简介、使用方法、案例大全之详细攻略
Python语言学习之lambda:lambda函数的简介.使用方法.案例大全之详细攻略 目录 lambda函数的简介 1.lambda匿名函数的格式 2.lambda函数特点 3.lambda函数与 ...
最新文章
- python 类的特殊属性、特殊方法 __str__,__bases__,__mor__,__add__,__call__
- IOS中UITableview中封装九宫格
- leetcode 91. 解码方法(dp)
- C#使用SQLite数据库的代码示例
- Android 下 Kernel Debug (Qualcomm Chipset)
- 斗鱼主播后台礼物数据爬取
- 3D旋转相册代码及详细使用教程
- vue 数字正则表达式详解
- Confluence 摘要(Excerpt)宏
- NPM install报错certificate has expired
- 希尔排序及手推时间复杂度(java实现)
- [论文阅读-NeRF+SLAM] iMAP:首个隐式场景表征的实时SLAM
- [转]程序员生涯之我见 找到自己的兴趣所在
- 20230308-二维数组的长度
- C++输入日期判断是周几
- 【NumPy】 快速构建 ndarray 对象(np.empty、np.full、np.titl、np.r_、np.linspace)
- php 位深度,支撑位和阻力位的分析:究竟哪些位置可以形成阻力位和支撑位? 深度教程(图解)...
- Android4.4 内置应用默认打开无障碍服务
- 真实世界的Haskell(影印版)
- Fedora24!到此一游
热门文章
- 阿里OSS 渗透案例
- matlab笔记——绘图篇——折线图+散点图+饼图+直方图+柱状图+箱线图+三维图+地图
- 如何用计算机画出分子轨道图,定性分子轨道理论简介
- 【蓝桥杯】单片机学习(10)——I2C通信协议与E2PROM
- 磁盘结构损坏且无法读取一种解决办法
- html中圆点标签,HTML标签大全(类型)
- Eclipse切换SVN账号操作
- Armadillo 4.xx - 5.xx HWID Changer v.0.2 by TrueLies
- 2006年第一学期小小班个人计划
- B站大学开课了-《数字集成电路静态时序分析基础》