Bubble Sort
需求
输入带存储单位的数值,排序后输出
1G=1000M;1T=1000G
举例
(第一行为将要输入的数值个数)
输入:
3
1G
50M
2T
输出:
50M
1G
2T
解题思路
- 用一个底层数组为个数为num的切片放传进来的存储数值
- 将数值单位转化为对应个数的0,转化后的值作为map的key,转化前的为map的value
- 冒泡排序将切片排序
- 遍历切片,拿到map的key,打印对应的value,完事收工
代码实现
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
for {
input1, _, _ := reader.ReadLine()
inputLen := len(input1)
if inputLen == 0 {
break
}
num, _ := strconv.Atoi(string(input1))
inputArr := make([]string,num)
memoryMp := make(map[string]string)
for i := 0; i < num; i++ {
inputNum, _, _ := reader.ReadLine()
inputArr[i] = string(inputNum)
}
for i := 0; i < num; i++ {
temp := strings.Replace(inputArr[i], "M", "", -1)
temp = strings.Replace(temp, "G", "000", -1)
temp = strings.Replace(temp, "T", "000000", -1)
memoryMp[temp] = inputArr[i]
inputArr[i] = temp
}
fmt.Println(inputArr)
fmt.Println(memoryMp)
for i := 0; i < num; i++ {
flag := false
for j := 1; j < num-i; j++ {
pre, _ := strconv.Atoi(inputArr[j-1])
next, _ := strconv.Atoi(inputArr[j])
if pre > next {
temp := inputArr[j-1]
inputArr[j-1] = inputArr[j]
inputArr[j] = temp
flag = true
}
}
if !flag {
break
}
}
fmt.Println("正确的排序为:")
fmt.Println(inputArr)
for i := 0; i < num; i++ {
fmt.Println(memoryMp[inputArr[i]])
}
}
}
搞定!