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]])
		}
	}
}

搞定!