排序算法与自定义排序算法

本文介绍了快速排序算法的实现原理及时间复杂度,并展示了如何使用快速排序对非负整数数组进行排序,以找到拼接成最小数的方法。通过自定义排序规则,对数组元素进行比较,最终将排序后的数组连接成最小的数。代码示例详细解释了整个过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速排序复习

思想:利用二分法+递归
时间复杂度:O(nlogn)

var quickSort = function (arr) {
    if (!arr.length) return []
    else if (arr.length === 1) return arr
    let left = []
    let right = []
    let mid = 0//表示基准数字的index
    for (let i = 1; i < arr.length; i++) {
        if (arr[i] > arr[mid]) right.push(arr[i])
        else left.push(arr[i])
    }
    return [...quickSort(left), arr[mid], ...quickSort(right)]
}

自定义排序

自定义排序指不是按照元素的大小来排序,而是根据自定义的规则对元素进行排序

剑指 Offer 45. 把数组排成最小的数
题目:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 思路:

  1. 根据自定义排序规则对数组进行排序
  2. 将排序后的数组拼接

在这里插入图片描述
代码实现:

var minNumber = function(nums) {
    return quickSort(nums).join('')
};

var quickSort = function (arr) {
    if (!arr.length) return []
    else if (arr.length === 1) return arr
    let left = []
    let right = []
    let mid = 0//表示基准数字的index
    for (let i = 1; i < arr.length; i++) {
        if (parseInt('' + arr[i] + arr[mid]) > parseInt('' + arr[mid] + arr[i])) right.push(arr[i])
        else left.push(arr[i])
    }
    return [...quickSort(left), arr[mid], ...quickSort(right)]
}

思路来源:https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/solution/mian-shi-ti-45-ba-shu-zu-pai-cheng-zui-xiao-de-s-4/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值