JS中的排序(七行手撕快排)

news/2024/7/19 13:28:33 标签: js

JS中的排序

  • 直接使用给定规则的sort()
  • 七行手撕快排
  • 正常手撕快排

直接使用给定规则的sort()

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 将给定数组排序
 * @param arr int整型一维数组 待排序的数组
 * @return int整型一维数组
 */
function MySort( arr ) {
    // write code here
    return arr.sort((a,b)=>{
        return a-b
    })
}
module.exports = {
    MySort : MySort
};

七行手撕快排

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 将给定数组排序
 * @param arr int整型一维数组 待排序的数组
 * @return int整型一维数组
 */
function MySort( arr ) {
    // write code here
    if(arr.length<=1) return arr;
    const current=arr.splice(arr.length/2,1)[0]//这里是拿出一个基准,arr.length-1也可以,注意,splice在原数组中删除这个元素
    let left=[],right=[]
    arr.forEach(ele=>{
        (ele>current?right:left).push(ele)
    })
    return MySort(left).concat(current,MySort(right))
}
module.exports = {
    MySort : MySort
};

正常手撕快排

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 将给定数组排序
 * @param arr int整型一维数组 待排序的数组
 * @return int整型一维数组
 */
function MySort( arr ) {
    // write code here
    return quick(arr,0,arr.length-1)
}
function quick(arr,left,right){
    let index
    if(arr.length>1){
        index=partition(arr,left,right)
        if(left<index-1){
            quick(arr,left,index-1)
        }
        if(index<right){
            quick(arr,index,right)
        }
    }
    return arr
}
function partition(arr,left,right){
    const pivot=arr[left]
    let i=left,j=right
    while(i<=j){
        while(arr[i]<pivot){
            i++
        }
        while(arr[j]>pivot){
            j--
        }
        if(i<=j){
            [arr[i],arr[j]]=[arr[j],arr[i]]
            i++
            j--
        }
    }
    return i
}
module.exports = {
    MySort : MySort
};

http://www.niftyadmin.cn/n/1846672.html

相关文章

实现二叉树先序,中序和后序遍历(递归在手,天下我有)js解法

实现二叉树先序&#xff0c;中序和后序遍历什么是二叉树的先序中序后序遍历呢&#xff1f;描述示例1代码什么是二叉树的先序中序后序遍历呢&#xff1f; 我的简单理解就是&#xff0c;先中后指的是root根节点的位置&#xff0c;比如先序就是根节点放在前面 同理&#xff0c;中…

percona-toolkit 工具使用系列

安装wget http://www.percona.com/redir/downloads/percona-toolkit/2.1.10/percona-toolkit-2.1.10-1.noarch.rpmyum install --nogpgcheck -y perl-TermReadKey.x86_64 percona-toolkit-2.1.10-1.noarch.rpmpt-mysql-summary (Summarize MySQL information nicely.)#--save-s…

Spring MVC 学习日志4.类型转换+数据格式化+数据校验(使用IDEA)

1、自定义类型转换 1.1、步骤 * 1.定义明确源类型与目标类型 * 2.在convert方法中自定义类型转换的实现 * 3.在springmvc中配置自定义类型转换器 * <!--配置自定义类型转换器--> * <bean class"org.springframework.context.support.ConversionServiceF…

链表与环(找相遇点和入口)

链表与环题目一&#xff1a;判断链表中是否有环解法一&#xff1a;双指针解法二&#xff1a;哈希表题目二&#xff1a;链表中环的入口结点题目一&#xff1a;判断链表中是否有环 解法一&#xff1a;双指针 /** function ListNode(x){* this.val x;* this.next null;* }…

Android 实现一个简单的自定义View

自定义View的相关文章&#xff1a; Android 实现一个简单的自定义ViewAndroid 自定义View步骤Android Paint详解Android 自定义View之Canvas相关方法说明Android 自定义View实例之 “京东跑”Android 自定义View实例之进度圆环Android 源码分析&#xff08;TextView&#xff0…

Spring MVC 学习日志5.JSON数据处理(请求+响应)(使用IDEA)

1、JSON数据格式 2、导入Jackson底层实现的依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&qu…

[前端必刷75题]3.dom节点查找

dom节点查找描述输入描述代码一代码二描述 查找两个节点的最近的一个共同父节点&#xff0c;可以包括节点自身 输入描述 oNode1 和 oNode2 在同一文档中&#xff0c;且不会为相同的节点 代码一 function commonParentNode(oNode1, oNode2) {if(oNode1.contains(oNode2)){r…

更好地理解实例变量和类实例

要理解实例变量&#xff0c;得先说一下函数调用的过程。 函数 下面是一个简单的代码&#xff1a; void function(int a) {printf("%d", a); } int A 5; function(A);function()的定义中&#xff0c;变量a是一个形参&#xff0c;调用时的那个变量A称为实参。 函数的定…