算法基础:正整数指定规则排序问题(Golang实现)

来源:互联网 发布:七天网络登录 编辑:程序博客网 时间:2024/06/06 16:26

给定字符串内有很多正整数,要求对这些正整数进行排序,然后返回排序后指定位置的正整数

排序要求:按照每个正整数的后三位数字组成的整数进行从小到大排序
1)如果不足三位,则按照实际位数组成的整数进行比较
2)如果相等,则按照输入字符串中的原始顺序排序

说明(以下内容考生无须检查,调用者保证):
1) 字符串内正整数之间以单个空格分隔,字符串首尾没有空格
2) 正整数格式为十进制,大小:1~1000000,正整数的数字非零开始

示例:
如字符串内容
1223 22 3232 2016

按照规定排序后
2016 22 1223 3232

查询排序后的第3个数是
1223

代码实现:

package huaweiimport (    "errors"    "fmt"    "strconv"    "strings")func Test6Base() {    s := "2115 22 2128 3115 4119 2016 2119"    findIndex := 2    result, err := findString(s, findIndex)    if err == nil {        fmt.Println("result:", result)    } else {        fmt.Println("Error:", err.Error())    }}//将resString按照指定规则排序,然后返回索引为findIndex位置的字符串func findString(resString string, findIndex int) (result int, err error) {    if resString == "" {        return -1, errors.New("Param resString is an empty string.")    }    numsStr := strings.Fields(resString)    if findIndex < 0 || findIndex > len(numsStr)-1 {        return -1, errors.New("Param findIndex is invalid.")    }    numsInt := convertToInt(numsStr)    //冒泡排序(稳定)    var change bool = false    for i := 0; i < len(numsInt)-1; i++ {        change = false        for j := 1; j < len(numsInt)-i; j++ {            if numsInt[j]%1000 < numsInt[j-1]%1000 {                change = true                numsInt[j], numsInt[j-1] = numsInt[j-1], numsInt[j]            }        }        if !change {            break        }    }    fmt.Println(numsInt)    return numsInt[findIndex], nil}//将[]string转为[]intfunc convertToInt(numsStr []string) []int {    numsInt := make([]int, len(numsStr))    for i, v := range numsStr {        n, err := strconv.Atoi(v)        checkError(err, "string to integer")        numsInt[i] = n    }    return numsInt}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 兄弟侵犯大嫂中文字幕迅雷视频 大香煮蕉伊在线网视频推手 91青青城线在人线免费人人人 91青青城人线在人线 95青青成线人人 青青成线小说 青青成线人线免 第一成一肉区免 费91 欧洲第一肉场 欧洲第一成肉区免 费91ap 免费欧洲第一成肉区免 费91 欧洲第一成一肉区免 费9 欧洲第一成一肉区免 费91人雨马 欧洲笫一肉区l1041 久碰人人澡人人澡人人澡人人澡 看欧洲第一成肉区免 免费在 线人擦人人搞人视频人人人 人人差人人搞人视频 人人看人人揉人人捏动漫 超越人人夜人人看视频 人人玩人人弄人槽视频动漫 草人人拍人人躁 人人人人看人谢97 免费在 线人擦人人搞人视频动漫视频 人人看人人揉人人捏视频 青青成线人线免费公开 亚成区1216成线人 青青成年在人线免费人人拍人人 人玩人人弄人人 人人看人人揉人人捏免费线看 人上人人玩人人与人意义 人在人上人在肉中 人下人人上人捧人 八人来人人上人个草人 人捧人 人上人 人踩人 人上人捧人上人人下人踩人下人 上人 上口人人人 人上人 人上人玩人人与人人 人捧人人上人 人踩人人下人 亚城区1216成线人 97青青成线