题解 | #字符串排序#
字符串排序
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))