题解 | #字符串排序#

字符串排序

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))
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务