题解 | #字符串排序#

字符串排序

http://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723

本题如果采用JavaScript自带的sort()函数求解,应该是最简单直接的,因为该函数默认即是按照字典顺序进行排序

let n = ~~readline()
function main(){
	let arr = []
    for(let i = 0 ; i < n ; i++) {
    	arr.push(readline())
    }
    arr.sort()	// 直接进行排序
  	return arr
}

main().forEach(s => console.log(s))

但是一般考察都会让我们自己实现排序方法,即按照字典的顺序排序,下面是采用快排的方式进行的实现

const n = ~~readline()

function createList() {
    const list = []
    for(let i = 0 ; i < n ; i++) {
        list.push(readline())
    }
    return list
}

function quickSort(arr, left, right) {
    if(left < right) {
        let pivot = partition(arr, left, right)
        quickSort(arr, left, pivot - 1)
        quickSort(arr, pivot + 1, right)
    }
}

function partition(arr, left, right) {
    let pivot = arr[right]
    let mark = left
    for(let i = left ; i <= right - 1 ; i++) {
        if(compare(arr[i], pivot) === -1) {
            [arr[i], arr[mark]] = [arr[mark], arr[i]]
            mark++
        }
    }
    [arr[mark], arr[right]] = [arr[right], arr[mark]]
    return mark
}

// 按字典顺序判断两个字符串的大小
function compare(left, right) {
    let i = 0
    while(left[i] && right[i]) {
        if(left[i] > right[i]) return 1
        else if(left[i] < right[i]) return -1
        i++
    }
    if(left[i] || right[i]) return left[i] ? 1 : -1
    return 0
}

const arr = createList()
quickSort(arr, 0, arr.length-1)
arr.forEach(s => console.log(s))
全部评论

相关推荐

2024-12-29 19:48
河北科技大学 Java
我真的会练有氧:1.如果没有实习经验,项目一个太少了 2.项目的需求描述不要写成用xxx实现了xxx。写明具体的需求功能就可以,除非是你想特别突出让面试官问的问题 3.证书就一个4级没必要摆上去,摆上去显得你就只有一个4级 4.技术栈太少了,且比较简略,可以加点分布式,常用的微服务组件,架构设计等等信息 个人意见,不喜勿喷
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务