PAT乙 1045 快速排序 (GO)
解题思路:
- 暴力搜索肯定是不行的,对于go的话用scanf会超时,这里我先读入一行字符串然后转成整型数组
- 主元就是比左边的大,比右边的小,而且排序后位置不变
- 经过一轮排序,当前位置的数字如果和排序后的数字一样,并且比前面所有的数都大
提供几个测试用例供大家参考:
9
1 3 5 2 4 6 9 8 7
2
1 6
9
1 2 3 6 5 8 7 4 9
4
1 2 3 9
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strconv"
"strings"
)
func main() {
var n int
_,_ = fmt.Scanf("%d", &n)
array := make([]int, n)
sortArray := make([]int, n)
result := make([]int, n)
//输入一行字符串
inputReader := bufio.NewReader(os.Stdin)
str,_ := inputReader.ReadString('\n')
strArr := strings.Fields(str)//按空格分隔成数组
for i:=0; i<n; i++ {//字符串数组转整型
array[i],_ = strconv.Atoi(strArr[i])
sortArray[i] = array[i]
}
sort.Ints(sortArray)//排序
max := 0
k := 0
for i:=0; i<n; i++ {
if array[i] > max {
max = array[i]
}
if array[i] == sortArray[i] && array[i] == max {
result[k] = array[i]
k++
}
}
fmt.Println(k)
for i:=0; i<k; i++ {
if i == k - 1 {
fmt.Printf("%d", result[i])
} else {
fmt.Printf("%d ", result[i])
}
}
fmt.Println()
}