快速排序复习
思想:利用二分法+递归
时间复杂度: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. 把数组排成最小的数
题目:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 思路:
- 根据自定义排序规则对数组进行排序
- 将排序后的数组拼接
代码实现:
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/